Глюк с ZwQueryInformationFile

Тема в разделе "WASM.BEGINNERS", создана пользователем Flasher, 21 авг 2011.

  1. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    При каких обстоятельствах ZwQueryInformationFile может возвращать успешно, но показывая размер файла 0, это притом что там далеко не 0?

    Код (Text):
    1.      local iosb:IO_STATUS_BLOCK
    2.      local buffer[64]:byte
    3.      local FileHandle:dword
    4.        push FILE_SYNCHRONOUS_IO_NONALERT
    5.        push FILE_SHARE_READ
    6.        lea eax,iosb
    7.        push eax
    8.        push oa
    9.        push FILE_READ_DATA + SYNCHRONIZE
    10.        lea eax,FileHandle
    11.        push eax
    12.        call ZwOpenFile
    13.         .if eax == 0
    14.            push FileStandardInformation
    15.            push sizeof FILE_STANDARD_INFORMATION
    16.            lea eax,buffer
    17.            push eax
    18.            lea eax,iosb
    19.            push eax
    20.            push FileHandle
    21.            call ZwQueryInformationFile
    22.             .if eax == 0
    23.                lea eax,buffer
    24.                mov eax,FILE_STANDARD_INFORMATION.EndOfFile.LowPart[eax]
    В eax = 0

    Может есть другой способ получения размера файла?
     
  2. freyr

    freyr New Member

    Публикаций:
    0
    Регистрация:
    23 фев 2010
    Сообщения:
    95
    есть :)

    Код (Text):
    1. BOOL WINAPI GetFileSizeEx(
    2.   __in   HANDLE hFile,
    3.   __out  PLARGE_INTEGER lpFileSize
    4. );
     
  3. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    Пробовал, тоже 0 возвращает. Между прочем GetFileSizeEx юзает ZwQueryInformationFile
    :P
     
  4. T800

    T800 Member

    Публикаций:
    0
    Регистрация:
    7 дек 2006
    Сообщения:
    293
    Адрес:
    Moscow
    Flasher
    Попробуй так получать хендл:
    ZwCreateFile(
    &Handle,
    FILE_READ_ATTRIBUTES | SYNCHRONIZE,
    &ObjectAttributes,
    &IoStatusBlock,
    NULL,
    FILE_ATTRIBUTE_NORMAL,
    FILE_SHARE_READ | FILE_SHARE_WRITE,
    FILE_OPEN,
    FILE_SYNCHRONOUS_IO_NONALERT | FILE_NON_DIRECTORY_FILE,
    NULL,
    0);