hHandle == INVALID_HANDLE_VALUE?

Тема в разделе "WASM.BEGINNERS", создана пользователем Inkognito, 2 май 2008.

  1. Inkognito

    Inkognito New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2008
    Сообщения:
    25
    Код (Text):
    1. hHandle = CreateFile( "\\\\.\\ipfilt",GENERIC_READ | GENERIC_WRITE,
    2.                 FILE_SHARE_READ | FILE_SHARE_WRITE,
    3.                 NULL,
    4.                 OPEN_EXISTING,
    5.                 FILE_ATTRIBUTE_NORMAL,
    6.                 NULL );
    7.     if(hHandle == INVALID_HANDLE_VALUE)
    8.     {    
    9.         printf("ERR: can not access driver ipfilt.sys! (%d)\n", GetLastError());
    10.         goto done;
    11.     }
    Что может означать если функция CreateFile() возврвщает INVALID_HANDLE_VALUE? А GetLastError() возвращает 2 - не удаётся найти указанный файл (на сколько я понимаю), хотя WinObj показывает, что:
    драйвер "\Driver\ipfilt" - существует;
    устройство "\Device\ipfilt" - существует;
    символьная ссылка на устройство "\??\ipfilt" - существует.
     
  2. comrade

    comrade Константин Ёпрст

    Публикаций:
    0
    Регистрация:
    16 сен 2002
    Сообщения:
    232
    Адрес:
    Russian Federation
    Попробуй убрать FILE_SHARE_READ | FILE_SHARE_WRITE и FILE_ATTRIBUTE_NORMAL
     
  3. Inkognito

    Inkognito New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2008
    Сообщения:
    25
    не помогло
     
  4. DEEP

    DEEP Андрей

    Публикаций:
    0
    Регистрация:
    27 апр 2008
    Сообщения:
    491
    Адрес:
    г. Владимир
    А может, дело в правах доступа, каковые при открытии файла у тебя по умолчанию? Таки винда ещё не до конца здурела чтобы всяким незнакомым процессам давать полный доступ ко всем дровам...
     
  5. Inkognito

    Inkognito New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2008
    Сообщения:
    25
    А как узнать, какие права доступа при открытии файла у меня по умолчанию?
    Почему ко всем, это же мой драйвер?
     
  6. zoool

    zoool New Member

    Публикаций:
    0
    Регистрация:
    1 дек 2007
    Сообщения:
    412
    Код (Text):
    1. hHandle = CreateFile( "\\\\.\\ipfilt",GENERIC_READ | GENERIC_WRITE,
    2.                 FILE_SHARE_READ | FILE_SHARE_WRITE,
    3.                 NULL,
    4.                 OPEN_EXISTING,
    5.                 FILE_ATTRIBUTE_NORMAL,
    6.                 NULL );
    я вижу две возможные проблемы:

    1. Права доступа (SHARE)
    Попробуй установить FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE
    Хотя если GetLastError вовзращает -2, то трабла вероятно не здесь.

    2. несуществующая символьная ссылка.
    Ты в драйвере верно создал устройство и символьную ссылку на него: ipfilt?
    Приведи свой код создания устройства и символьной ссылки
     
  7. Inkognito

    Inkognito New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2008
    Сообщения:
    25
    Установил FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE
    GetLastError() по прежниму возвращает 2.

    Код (Text):
    1. PDEVICE_OBJECT fdo = NULL;
    2. UNICODE_STRING  devName, symLinkName;
    3. NTSTATUS
    4. DriverEntry(IN PDRIVER_OBJECT theDriverObject,
    5.         IN PUNICODE_STRING theRegistryPath)
    6. {
    7.   NTSTATUS status = STATUS_SUCCESS;
    8.  
    9.   RtlInitUnicodeString( &devName, L"\\Device\\ipfilt" );
    10.  
    11.   status = IoCreateDevice(theDriverObject, 0, &devName, FILE_DEVICE_UNKNOWN, 0 , FALSE, &fdo);
    12.     if(!NT_SUCCESS(status))
    13.         return status;
    14.   RtlInitUnicodeString( &symLinkName, L"\\??\\ipfilt" );
    15.  
    16.   status = IoCreateSymbolicLink( &symLinkName, &devName );
    17.     if (!NT_SUCCESS(status))
    18.     {
    19.         IoDeleteDevice( fdo );
    20.         return status;
    21.         }
    22. }