Как получить символьную ссылку драйвера

Тема в разделе "WASM.NT.KERNEL", создана пользователем haxorart, 11 мар 2010.

  1. haxorart

    haxorart New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    123
    Пишу программу для тестирования работы драйверов. Необходимо чтобы она загружала драйверы и открывала их. С загрузкой всё просто. А вот как открыть драйвер если не знаешь его символьную ссылку?
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Это какая такая символьная ссылка, на что? На CDO?
    Открыть драйвер это как? Быть может, все-таки открыть CDO?
    Ну очевидно, чтобы открыть CDO драйвера, нужно знать его имя. Не знаешь имя - не откроешь из юзермода.
     
  3. int2eh

    int2eh Alexander Leevy

    Публикаций:
    0
    Регистрация:
    19 авг 2007
    Сообщения:
    106
    Адрес:
    Москва
    haxorart

    Смотри имена драйверов в каталоге объектов Windows \Driver, поможет NtOpenDirectoryObject и NtQueryDirectoryObject
     
  4. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    int2eh
    Не поможет. Откроешь ты драйвер обжект, а дальше что?
     
  5. int2eh

    int2eh Alexander Leevy

    Публикаций:
    0
    Регистрация:
    19 авг 2007
    Сообщения:
    106
    Адрес:
    Москва
    DRIVER_OBJECT->PDEVICE_OBJECT... ->NextDevice
     
  6. int2eh

    int2eh Alexander Leevy

    Публикаций:
    0
    Регистрация:
    19 авг 2007
    Сообщения:
    106
    Адрес:
    Москва
    а потом тестируй драйвер: шли ему Irp
     
  7. halfblood

    halfblood New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2010
    Сообщения:
    3
    GUID от драйвера есть? тогда setupapi и вперед...
     
  8. halfblood

    halfblood New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2010
    Сообщения:
    3
    SetupDiGetClassDevs, SetupDiEnumDeviceInterfaces, SetupDiGetDeviceInterfaceDetail,

    Код (Text):
    1.     hardwareDeviceInfo = SetupDiGetClassDevsA(
    2.         (LPGUID)&GUID_DRIVER_INTERFACE_STANDARD,
    3.         NULL, // Define no enumerator (global)
    4.         NULL, // no window
    5.         (DIGCF_PRESENT | // Only Devices present
    6.         DIGCF_DEVICEINTERFACE) // Function class devices.
    7.         );
    8.  
    9.     if(hardwareDeviceInfo == INVALID_HANDLE_VALUE) {
    10.         ICE_LOG_ERROR((
    11.             MODULE_NAME_IZSRV,
    12.             "SetupDiGetClassDevs failed. error (%u)!",
    13.             GetLastError()
    14.             ));
    15.  
    16. ///error
    17.         goto Error;
    18.     }
    19.  
    20.  
    21.     deviceInterfaceData.cbSize = sizeof(deviceInterfaceData);
    22.  
    23.     for(i=0;
    24.         SetupDiEnumDeviceInterfaces(
    25.             hardwareDeviceInfo,
    26.             0, // No care about specific PDOs
    27.             (LPGUID)&GUID_XBPIPE_INTERFACE_STANDARD,
    28.             i, //
    29.             &deviceInterfaceData
    30.             );
    31.         i++
    32.         ) {
    33.        
    34.    
    35.         if(deviceInterfaceDetailData) {
    36.  
    37.             free((BYTE*)deviceInterfaceDetailData);
    38.         }
    39.                
    40.         if( !SetupDiGetDeviceInterfaceDetailA(
    41.                 hardwareDeviceInfo,
    42.                 &deviceInterfaceData,
    43.                 NULL, // probing so no output buffer yet
    44.                 0, // probing so output buffer length of zero
    45.                 &requiredLength,
    46.                 NULL
    47.                 ) &&
    48.             (error = GetLastError()) != ERROR_INSUFFICIENT_BUFFER
    49.             )
    50.         {
    51.             goto Error;
    52.         }
    53.  
    54.         predictedLength = requiredLength;
    55.  
    56.         tempPointer = (PBYTE)malloc(predictedLength));
    57.         deviceInterfaceDetailData = (PSP_DEVICE_INTERFACE_DETAIL_DATA_A) tempPointer;
    58.  
    59.         if( !deviceInterfaceDetailData ) {        
    60.  
    61. ///error
    62.             goto Error;
    63.         }
    64.  
    65.         memset( deviceInterfaceDetailData, 0, predictedLength );
    66.  
    67.         deviceInterfaceDetailData->cbSize = sizeof (SP_DEVICE_INTERFACE_DETAIL_DATA_A);
    68.  
    69.         if( !SetupDiGetDeviceInterfaceDetailA(
    70.                    hardwareDeviceInfo,
    71.                    &deviceInterfaceData,
    72.                    deviceInterfaceDetailData,
    73.                    predictedLength,
    74.                    &requiredLength,
    75.                    NULL
    76.                    )
    77.             )
    78.         {        
    79.  
    80. ///error
    81.  
    82.             goto Error;
    83.         }
    84.  
    85.         //
    86.         // А вот мы и получили путь к устройству, теперь моно делать CreateFile
    87.         //
    88.         deviceInterfaceDetailData->DevicePath
    89.        
    90.     }
    91.  
    92.     if(deviceInterfaceDetailData) {
    93.  
    94.         free( (BYTE*) deviceInterfaceDetailData );
    95.     }
    96.  
    97.     SetupDiDestroyDeviceInfoList (hardwareDeviceInfo);
    98.  
    99.     ICE_LOG_EXIT(MODULE_NAME_IZSRV);
    100.  
    101. Error:
    102.  
    103.     error = GetLastError();
    104.  
    105.     /// error
    106.  
    107.     if(deviceInterfaceDetailData) {
    108.  
    109.         free((char*)deviceInterfaceDetailData);
    110.     }
    111.  
    112.     SetupDiDestroyDeviceInfoList (hardwareDeviceInfo);
    где GUID_DRIVER_INTERFACE_STANDARD - GUID of the driver!
     
  9. halfblood

    halfblood New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2010
    Сообщения:
    3
    Упс, по ходу не то... ))
     
  10. haxorart

    haxorart New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    123
    Я слышал есть ф-я QueryDosDеvice или что-то типо того сегодня попробую. А вообще из самого драйвера нельзя эту информацию стянуть? Ведь ссылка и имя драйвера должны быть в самом драйвере для его регистрации.
     
  11. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Не обязательно.
     
  12. haxorart

    haxorart New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    123
    Я имел ввиду если она там вообще есть, то есть если драйвер её регистрирует.
     
  13. reader323

    reader323 New Member

    Публикаций:
    0
    Регистрация:
    8 июл 2009
    Сообщения:
    134
    по имени девайса
     
  14. haxorart

    haxorart New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    123
    Решил проблему с помощью QueryDosDevice.
     
  15. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    int2eh
    Из "программы по тестированию работы драйверов", видимо юзермодной? Удачи.)
     
  16. haxorart

    haxorart New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    123
    Это точно))) В юзермоде это будет весьма проблематично.
     
  17. Unikus

    Unikus New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2010
    Сообщения:
    2
    У меня выбрасывает такое сообщение "querydosdevice failed" и перестают корректно работать некоторые проги.И в конце концов приходится ресетить комп.
    Подскажите ,пожалуйста,как можно обнаружить источник провоцирующий это сообщение.
     
  18. haxorart

    haxorart New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    123
    Опиши проблему более детально.
     
  19. Unikus

    Unikus New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2010
    Сообщения:
    2
    Отловил наконец-то с помощью Process Explorer .Это vialogsv.exe. У меня чипсет на материнке от VIA. Значит ли это что что-то с дровами?Или на уровне железа что-то? Писало что-то типа :не хватает системных ресурсов для завершения операции.

    Я так понял что это связано с RAID´ом.У меня via vt8763 apollo pt800,но к сожалению ни на оффсайте,ни на viaarena.com дров для него нет. Похоже что его нигде нет.Вот это засада...