Внутри MyNtCreateFile после вызова оригинальной STATUS_INVALID_HANDLE

Тема в разделе "WASM.WIN32", создана пользователем XPiS, 2 дек 2006.

  1. XPiS

    XPiS New Member

    Публикаций:
    0
    Регистрация:
    30 мар 2006
    Сообщения:
    13
    Перехват идет ок. Использование любого из способов: ObReferenceObjectByHandle, ZwQueryInformationFile получения имени файла дает STATUS_INVALID_HANDLE.
    Код (Text):
    1. NTSTATUS NewNtCreateFile(OUT PHANDLE FileHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PIO_STATUS_BLOCK IoStatusBlock,
    2.                                     IN PLARGE_INTEGER AllocationSize OPTIONAL, IN ULONG FileAttributes, IN ULONG ShareAccess, IN ULONG CreateDisposition,
    3.                                     IN ULONG CreateOptions, IN PVOID EaBuffer OPTIONAL, IN ULONG EaLength )
    4. {
    5.     NTSTATUS ret = TrueNtCreateFile(FileHandle, DesiredAccess, ObjectAttributes, IoStatusBlock, AllocationSize, FileAttributes, ShareAccess, CreateDisposition, CreateOptions, EaBuffer, EaLength);
    6.    
    7.     FILE_NAME_INFORMATION fni = {0};
    8.     PIO_STATUS_BLOCK psb = {0};
    9.    
    10.     if (ret == STATUS_SUCCESS)
    11.     {
    12.         __try
    13.         {
    14.             PFILE_OBJECT pF;
    15.             NTSTATUS nt = ObReferenceObjectByHandle(FileHandle,0,0,UserMode,&pF,NULL);
    16.            
    17.             if (nt == STATUS_SUCCESS)
    18.             {
    19.                 DPRINT("\nnHookReadFile %S", pF->FileName.Buffer);
    20.                 ObDereferenceObject(&pF);
    21.             }
    22.            
    23.             if (nt == STATUS_INVALID_HANDLE)
    24.             {
    25.                 DPRINT("STATUS_INVALID_HANDLE");
    26.             }
    27.            
    28.             /*
    29.            
    30.             PFILE_OBJECT pObject;
    31.             NTSTATUS nts = ObReferenceObjectByHandle(FileHandle, DesiredAccess, *IoFileObjectType, UserMode, &pObject,NULL);
    32.            
    33.             switch (nts)
    34.             {
    35.                 case STATUS_SUCCESS:
    36.                 {
    37.                     DPRINT("ok");
    38.                     break;
    39.                 }
    40.                 case STATUS_OBJECT_TYPE_MISMATCH:
    41.                 {
    42.                     DPRINT("STATUS_OBJECT_TYPE_MISMATCH");
    43.                     break;
    44.                 }
    45.                 case STATUS_ACCESS_DENIED:
    46.                 {
    47.                     DPRINT("STATUS_ACCESS_DENIED");
    48.                     break;
    49.                 }
    50.                 case STATUS_INVALID_HANDLE:
    51.                 {
    52.                     DPRINT("STATUS_INVALID_HANDLE");
    53.                     break;
    54.                 }
    55.             }*/
    56.            
    57.             /*NTSTATUS nts = ZwQueryInformationFile(FileHandle, psb, &fni, sizeof(fni), FileNameInformation);
    58.            
    59.             if (nts == STATUS_INVALID_HANDLE)
    60.             {
    61.                 DPRINT("InvalidHandle: 0x%x", FileHandle);
    62.             }
    63.            
    64.             if (nts == STATUS_SUCCESS)
    65.             {
    66.                 DPRINT("ok");
    67.             }*/
    68.         }
    69.         __except(1)
    70.         {
    71.             DPRINT("FUCK");
    72.         }
    73.     }
    74.    
    75.     return ret;
    76. }
     
  2. Cr4sh

    Cr4sh New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2006
    Сообщения:
    668
    >> ObReferenceObjectByHandle, ZwQueryInformationFile получения имени файла дает STATUS_INVALID_HANDLE

    потому что им нужно передавать не указатель на хендл, а сам хендл =)
    т.е. так: ObReferenceObjectByHandle(*FileHandle, ...);
     
  3. XPiS

    XPiS New Member

    Публикаций:
    0
    Регистрация:
    30 мар 2006
    Сообщения:
    13
    Спасибо.
    Почему в пути к файлу нету диска, а только имя? e.g. \Program Files\Winamp\winamp.exe
     
  4. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ
    потому что диск это фактически девица (см. IoGetRelatedDeviceObject)
     
  5. Cr4sh

    Cr4sh New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2006
    Сообщения:
    668
    >> Почему в пути к файлу нету диска, а только имя? e.g. \Program Files\Winamp\winamp.exe
    хз, по идее должно быть \Device\HarddiskVolumeX\Program Files\Winamp\winamp.exe