|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Апр 21, 2004 01:43:43 ... NTSTATUS status; POBJECT_ATTRIBUTES obj; UNICODE_STRING VolumeName; IO_STATUS_BLOCK ioStatus; obj = RtlAllocateHeap (Heap, 0, sizeof(OBJECT_ATTRIBUTES)); VolumeName.Buffer = RtlAllocateHeap( Heap, 0, 100 ); VolumeName.Buffer = L"\\??\\C:"; VolumeName.Length = wcslen( VolumeName.Buffer ) * sizeof(WCHAR); VolumeName.MaximumLength = VolumeName.Length + sizeof(WCHAR); InitializeObjectAttributes(obj, &VolumeName, OBJ_CASE_INSENSITIVE, NULL, NULL); status = NtCreateFile( &VolumeHandle, GENERIC_READ, obj, &ioStatus, 0, FILE_ATTRIBUTE_NORMAL, FILE_SHARE_READ|FILE_SHARE_WRITE, FILE_OPEN, FILE_NON_DIRECTORY_FILE|FILE_SYNCHRONOUS_IO_NONALERT, NULL, 0); ... native приложение. Ни в какую не хочет открывать. Статус ошибки - нет прав. Причем с файлами все в порядке, а если волюм открывать вот такая загвоздка. Помогите пожалуйста. |
|
|
Дата: Апр 21, 2004 04:15:27 VolumeName.Buffer = L"\\\\?\\C:" - может так? |
|
|
Дата: Апр 21, 2004 10:53:50 Никогда не писал Native-приложений, поэтому могу ляпнуть глупость (и даже не одну)... но я попытаюсь. В MSDN-е (в описании IOCTL_MOUNTDEV_QUERY_SUGGESTED_LINK_NAME) "нарыл" вот такую строчку: Drive letter names must include the full path of the symbolic link in object name space and must have the traditional DOS syntax. For instance, drive letter "D" must be represented in this manner: "\DosDevices\D:". The alternative symbolic link path of "\??\D:" may not be used, nor may abbreviations of the symbolic link such as "D:". Попробуй L"\\DosDevices\\C:". Хотя... он же не говорит "файл не найден", говорит "нет прав". Может, вместо FILE_ATTRIBUTE_NORMAL нужно 0 поставить? Тоже вряд ли... А может, причина вот в этом: If the caller is not running in the system process context, it must set the OBJ_KERNEL_HANDLE attribute for ObjectAttributes. Но тогда бы другие файлы тоже не открывались... а у тебя они открываются. "Ну тогда не знаю!" |
|
|
Дата: Апр 21, 2004 14:05:32 Систему не устраивает GENERIC_READ. Попробуй FILE_READ_ATTRIBUTES + SYNCHRONIZE. Правда, что потом делать с этим хендлом ? :) |
|
|
Дата: Апр 24, 2004 23:10:43 Всем спасибо. Прав оказался RobinFood :) вместо FILE_ATTRIBUTE_NORMAL нужно было 0 поставить. Всего-то. Только вот так и не смог понять почему... |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.169 |