Узнать имя по хендлу

Тема в разделе "WASM.WIN32", создана пользователем 2FED, 1 ноя 2009.

  1. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    Доброго времени суток, не подскажите как имея handle открытого файла возвращаемого CreateFile узнать имя этого файла?
     
  2. redcat

    redcat New Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    62
    GetFinalPathNameByHandle
     
  3. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    Код (Text):
    1. Minimum supported client    Windows Vista
    под XP чтонибудь есть?
     
  4. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    ZwQueryObject подойдёт?
     
  5. RET

    RET Well-Known Member

    Публикаций:
    17
    Регистрация:
    5 янв 2008
    Сообщения:
    789
    Адрес:
    Jabber: darksys@sj.ms
    Поиск по форуму рулит, тем 10 таких видел.
     
  6. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    попробовал через ZwQueryInformationFile, обычного файла возвращяет имя, а вот если это устройство, например '\\.\PhysicalDrive0' возвращяет STATUS_INVALID_DEVICE_REQUEST.

    Мне надо именно для устройства. Честно говоря как импользовать ZwQueryObject для получения имени не понял.
     
  7. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    2FED
    извиняюсь, недосмотрел. я имел ввиду ZwQueryInformationFile, промахнулся строкой при копировании имени.
     
  8. RET

    RET Well-Known Member

    Публикаций:
    17
    Регистрация:
    5 янв 2008
    Сообщения:
    789
    Адрес:
    Jabber: darksys@sj.ms
    да можно хоть так для диска без натива:
    Код (Text):
    1. VOLUME_DISK_EXTENTS VDE;
    2. DeviceIoControl(hDevice,IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS,NULL,0,&VDE, sizeof(VDE),&TmpVar,(LPOVERLAPPED) NULL);
    Получим ссылку вида:
    \\\\.\\PhysicalDrive0
     
  9. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    RamMerLabs
    А чем Вам уже ZwQueryObject не угодил?
     
  10. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    какое значение у IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS?

    у меня нету набора С++ а в заголовках масма такой константы нет.
     
  11. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    l_inc
    да всё с ним в порядке, но первоначально я хотел именно ZwQueryInformationFile сказать.
    можно и с ZwQueryObject: http://forum.shelek.ru/index.php/topic,827.0.html
     
  12. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    2FED
    есть замечательная утиль от Four-F - IoctlDecoder, лежит в KmdKit тут. в ней найдёшь IOCTL'ли
     
  13. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    2FED
    Странные у Вас вопросы. Одного запроса в гугл вида: "#define IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS" достаточно, чтобы получить тонну результатов с ответом.
     
  14. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    l_inc
    у гугля сегодня выходной :)
     
  15. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    RamMerLabs
    :)
     
  16. RET

    RET Well-Known Member

    Публикаций:
    17
    Регистрация:
    5 янв 2008
    Сообщения:
    789
    Адрес:
    Jabber: darksys@sj.ms
    кстати забыл добавить,по IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS мы получим DiskNumber,
    после чего нужно сделать примерно: sprintf(sz_drive_link,"\\\\.\\%d",VDE.Extents->DiskNumber);
     
  17. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    ну выполняю

    Код (Text):
    1. invoke  DeviceIoControl,hFile,5636096,0,0,addr buf,MAX_PATH,addr n,0
    воавращает 0 и код ошибки ERROR_INVALID_FUNCTION (00000001)
     
  18. RET

    RET Well-Known Member

    Публикаций:
    17
    Регистрация:
    5 янв 2008
    Сообщения:
    789
    Адрес:
    Jabber: darksys@sj.ms
    и причем тут hFile?
     
  19. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    Код (Text):
    1. .data
    2. aPDrive db  '\\.\PhysicalDrive0',0
    3.  
    4. .code
    5. .....
    6. LOCAL n:dword
    7. LOCAL hFile:dword
    8.  
    9.     invoke  CreateFile,addr aPDrive,0C0000000h,3,0,3,0,0
    10.     test    eax,eax
    11.     js      exit
    12.     mov     hFile,eax
    13.     invoke  RtlFillMemory,addr buf,MAX_PATH,0
    14.     invoke  DeviceIoControl,hFile,5636096,0,0,addr buf,MAX_PATH,addr n,0
     
  20. RET

    RET Well-Known Member

    Публикаций:
    17
    Регистрация:
    5 янв 2008
    Сообщения:
    789
    Адрес:
    Jabber: darksys@sj.ms
    1. addr buf - должен быть указатель на VOLUME_DISK_EXTENTS, откуда мы и будем извлекать DiskNumber;
    2. MAX_PATH - должен быть размер структуры VOLUME_DISK_EXTENTS;
    3. addr n - может быть NULL, т.к. не интересует нас и ф-цию в данном случае.