[This is preliminary documentation and subject to change.]
The FSCTL_QUERY_FAT_BPB operation returns the first 36 bytes of a FAT16 or FAT12 volume.
This operation is obsolete. Use GetVolumeInformation, GetDriveType, and other related functions to obtain some of the same information in a more structured manner. If you cannot get the necessary information in any other way, use CreateFile to open the volume as a file, and use ReadFile to access the raw hard drive.
To perform this operation, call the DeviceIoControl function with the following parameters.
BOOL DeviceIoControl(
(HANDLE) hDevice, // handle to device of interest
FSCTL_QUERY_FAT_BPB, // dwIoControlCode, control code of
// operation to perform
NULL, // lpInBuffer is not used; must be NULL
0, // nInBufferSize is not used; must be zero
(LPVOID) lpOutBuffer, // a pointer to an
// FSCTL_QUERY_FAT_BPB_BUFFER
(DWORD) nOutBufferSize, // size of the output buffer
(LPDWORD) lpBytesReturned, // pointer to variable to receive
// output byte count
(LPOVERLAPPED) lpOverlapped // pointer to OVERLAPPED structure
// for asynchronous operation
);
If lpOverlapped is NULL (nonoverlapped I/O), lpBytesReturned cannot be NULL.
If lpOverlapped is not NULL (overlapped I/O), lpBytesReturned can be NULL. If this is an overlapped operation, you can get the number of bytes returned by calling the GetOverlappedResult function. If hDevice is associated with an I/O completion port, you can get the number of bytes returned by calling the GetQueuedCompletionStatus function.
If hDevice was opened with the FILE_FLAG_OVERLAPPED flag, this parameter must point to a valid OVERLAPPED structure. In this case, DeviceIoControl is performed as an overlapped (asynchronous) operation. If the device was opened with the FILE_FLAG_OVERLAPPED flag and lpOverlapped is NULL, the function fails in unpredictable ways.
If hDevice was opened without specifying the FILE_FLAG_OVERLAPPED flag, this parameter is ignored and the DeviceIoControl function does not return until the operation has been completed, or until an error occurs.
If the operation succeeds, DeviceIoControl returns a nonzero value, and the output buffer pointed to by lpvOutBuffer contains a valid FSCTL_QUERY_FAT_BPB_BUFFER structure.
If the operation fails, DeviceIoControl returns zero. The contents of the output buffer pointed to by lpvOutBuffer are meaningless.
For the implications of overlapped I/O on this operation, see the Remarks section of the DeviceIoControl topic.
Device Input and Output Overview, Device Input and Output Operations, DeviceIoControl, CreateFile, FSCTL_QUERY_FAT_BPB_BUFFER, GetVolumeInformation, GetDriveType, ReadFile, GetOverlappedResult, GetQueuedCompletionStatus, Windows 95 Features