0x80000005 как результат ZwFsControlFile с FSCTL_GET_NTFS_FILE_RECORD

Тема в разделе "WASM.BEGINNERS", создана пользователем IceFire, 6 ноя 2009.

  1. IceFire

    IceFire New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2006
    Сообщения:
    244
    Здравствуйте. Пытаюсь получить MFT-Record, код следующий:

    Код (Text):
    1.     ns=ZwFsControlFile(     hVolume,  //Handle
    2.                     NULL,     //Event
    3.                     NULL,     //ApcRoutine
    4.                     NULL,     //ApcContext
    5.                     &StatusBlock, //IoStatusBlock
    6.                     FSCTL_GET_NTFS_VOLUME_DATA, //IoControlCode
    7.                     NULL, //InputBuffer
    8.                     0,    //InputBufferLength  
    9.                     &OutRecordInfo, //OutputBuffer
    10.                     sizeof(OutRecordInfo) //OutputBufferLength
    11.                     );
    12.  
    13.         InBuf.FileReferenceNumber.QuadPart=FileIndex;
    14.  
    15.     pOutBuf=ExAllocatePoolWithTag(NonPagedPool, (sizeof (NTFS_FILE_RECORD_OUTPUT_BUFFER) + sizeof (OutRecordInfo.BytesPerFileRecordSegment) - 1), 'MFTr');
    16.    
    17.     if (pOutBuf==NULL)
    18.     {
    19.         DbgPrint("Unable to allocate memory for NTFS_FILE_RECORD_OUTPUT_BUFFER struct. Terminating...");
    20.         return;
    21.     }
    22.  
    23.   ns=ZwFsControlFile(
    24.                     hVolume,  //Handle
    25.                     NULL,     //Event
    26.                     NULL,     //ApcRoutine
    27.                     NULL,     //ApcContext
    28.                     &StatusBlock, //IoStatusBlock
    29.                     FSCTL_GET_NTFS_FILE_RECORD, //IoControlCode
    30.                     &InBuf, //InputBuffer
    31.                     sizeof(InBuf),    //InputBufferLength  
    32.                     pOutBuf, //OutputBuffer
    33.                     (sizeof (NTFS_FILE_RECORD_OUTPUT_BUFFER) + sizeof (OutRecordInfo.BytesPerFileRecordSegment) - 1) //OutputBufferLength
    34.                     );
    Размер выходного буфера определял в соответствие со статьей из msdn:

    Второй вызов ZwFsControlFile возвращает STATUS_BUFFER_OVERFLOW. Причем, этот статус возвращается даже при увеличении выходного буфера в 10 раз.

    Почему так, кто подскажет?
     
  2. reverser

    reverser New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    615
    sizeof (OutRecordInfo.BytesPerFileRecordSegment) заменить на OutRecordInfo.BytesPerFileRecordSegment.
     
  3. IceFire

    IceFire New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2006
    Сообщения:
    244
    reverser

    Спасибо!