135 EfiStatus = BlockProtocol->
ReadBlocks(BlockProtocol,
182 if (OperationType == 1)
184 for (FailureCount = 0; FailureCount < 3; FailureCount++)
195 for (FailureCount = 0; FailureCount < 3; FailureCount++)
328 if (OperationType == 1)
379 if (OffsetEnd <
Size)
386 if (AlignedOffsetEnd < OffsetEnd)
470 if (MaxOffset < BlockDevice->BlockSize)
475 if (LastOffset < MaxOffset)
488 RemainingOffset = LastOffset -
Offset + 1;
490 if (DesiredSize !=
FALSE)
492 RealSize = *DesiredSize;
499 if (RemainingOffset < RealSize)
508 RealSize = RemainingOffset;
575 DeviceInformation->BlockDeviceInfo.Offset;
589 BlockDevice->Unknown = DeviceInformation->BlockDeviceInfo.Unknown;
603 DeviceEntry->DeviceSpecificData,
604 sizeof(DeviceInformation->BlockDeviceInfo));
628 ParentDisk = &InputDevice->Partition.Disk;
653 if (!DeviceInformation)
690 if (!DeviceInformation)
820 if ((Device1) && (Device2) && (Device1->DeviceType == Device2->DeviceType))
823 DeviceSize =
max(Device1->Size, Device2->Size);
952 if (
Handle == ProtocolInterface->Handle)
961 (
PVOID*)&DevicePath);
971 if (ParentDevicePath == ProtocolInterface->Interface)
974 ChildProtocolInterface->Handle =
Handle;
975 ChildProtocolInterface->Interface = DevicePath;
1019 Device = DeviceEntry->DeviceDescriptor;
1041 EfiPrintf(
L"Pass %d, Leaf node: %p Type: %d\r\n",
i, LeafNode, LeafNode->
Type);
1054 Device->Local.FloppyDisk.DriveNumber = AcpiPath->
UID;
1090 &
Device->Local.HardDisk.Gpt.PartitionSignature);
1095 &
Device->Local.HardDisk.Gpt.PartitionSignature,
1115 Device->Local.FloppyDisk.DriveNumber = 0;
1224 Device->Size =
sizeof(*Device);
1247 *DeviceEntry = IoDeviceEntry;
1301 LocalDeviceInfo = &
Device->Partition.Disk;
1306 LocalDeviceInfo = &
Device->Local;
1333 EfiLocalDeviceInfo = &EfiDevice->
Partition.Disk;
1338 EfiLocalDeviceInfo = &EfiDevice->
Local;
1342 if (EfiLocalDeviceInfo->
Type != LocalDeviceInfo->
Type)
1349 switch (EfiLocalDeviceInfo->
Type)
1356 sizeof(LocalDeviceInfo->
HardDisk)) ==
1381 sizeof(LocalDeviceInfo->
RamDisk)) ==
1382 sizeof(LocalDeviceInfo->
RamDisk))
1392 &LocalDeviceInfo->
File,
1393 sizeof(LocalDeviceInfo->
File)) ==
1394 sizeof(LocalDeviceInfo->
File))
1453 DeviceMatch =
FALSE;
1471 sizeof(DeviceHandles[
i]));
1516 sizeof(*BlockIoDevice));
1594 DeviceEntry->Callbacks.Close =
DiskClose;
1719 if (((
Flags & 8) || !(DeviceEntry->
Flags & 8)) &&
1964 sizeof(DeviceEntry->Callbacks));
1986 if (FoundDeviceEntry)
1993 sizeof(DeviceEntry->Callbacks));
2004 switch (
Device->Local.Type)
2087 if (DeviceEntry ==
NULL)
2161 Device = LocateDeviceDescriptor;
2209 DeviceEntry->
Flags |= 8;
2225 NextEntry = ListHead->
Flink;
2226 while (NextEntry != ListHead)
2242 NextEntry = NextEntry->
Flink;
2329 #if BL_BITLOCKER_SUPPORT 2331 Status = FvebInitialize();
NTSTATUS UdpOpen(_In_ PBL_DEVICE_DESCRIPTOR Device, _In_ PBL_DEVICE_ENTRY DeviceEntry)
EFI_GUID EfiBlockIoProtocol
_Must_inspect_result_ _In_ WDFUSBDEVICE _In_opt_ WDFREQUEST _In_opt_ PWDF_REQUEST_SEND_OPTIONS _In_ PWDF_USB_CONTROL_SETUP_PACKET _In_opt_ PWDF_MEMORY_DESCRIPTOR _Out_opt_ PULONG BytesTransferred
struct _BL_REGISTERED_DEVICE * PBL_REGISTERED_DEVICE
PBL_DEVICE_DESCRIPTOR BlpBootDevice
return STATUS_NOT_SUPPORTED
BL_DEVICE_CALLBACKS UdpFunctionTable
BL_DEVICE_CALLBACKS PartitionDeviceFunctionTable
NTSTATUS EfiLocateHandleBuffer(_In_ EFI_LOCATE_SEARCH_TYPE SearchType, _In_ EFI_GUID *Protocol, _Inout_ PULONG HandleCount, _Inout_ EFI_HANDLE **Buffer)
_IRQL_requires_same_ _In_opt_ PVOID Argument1
BOOLEAN BlockIoDeviceTableCompare(_In_ PVOID Entry, _In_ PVOID Argument1, _In_ PVOID Argument2, _In_ PVOID Argument3, _In_ PVOID Argument4)
NTSTATUS BlDeviceGetInformation(_In_ ULONG DeviceId, _Out_ PBL_DEVICE_INFORMATION DeviceInformation)
NTSTATUS BlDeviceReadAtOffset(_In_ ULONG DeviceId, _In_ ULONG Size, _In_ ULONGLONG Offset, _In_ PVOID Buffer, _Out_ PULONG BytesRead)
NTSTATUS BlockIoEfiGetDeviceInformation(_In_ PBL_DEVICE_ENTRY DeviceEntry)
#define BL_DEVICE_WRITE_ACCESS
NTSTATUS RdDeviceOpen(_In_ PBL_DEVICE_DESCRIPTOR Device, _In_ PBL_DEVICE_ENTRY DeviceEntry)
VOID BlpArchSwitchContext(_In_ BL_ARCH_MODE NewMode)
BL_DEVICE_CALLBACKS RamDiskDeviceFunctionTable
IN BOOLEAN OUT PSTR Buffer
NTSTATUS BlockIoEfiGetBlockIoInformation(_In_ PBL_BLOCK_DEVICE BlockDevice)
NTSTATUS BlHtLookup(_In_ ULONG TableId, _In_ PBL_HASH_ENTRY Entry, _Out_ PBL_HASH_VALUE *Value)
NTSTATUS BlpDeviceInitialize(VOID)
#define EISA_PNP_ID(_PNPId)
#define STATUS_INVALID_PARAMETER
NTSTATUS BlHtCreate(_In_ ULONG Size, _In_ PBL_HASH_TABLE_HASH_FUNCTION HashFunction, _In_ PBL_HASH_TABLE_COMPARE_FUNCTION CompareFunction, _Out_ PULONG Id)
NTSTATUS BlockIoGetInformation(_In_ PBL_DEVICE_ENTRY DeviceEntry, _Out_ PBL_DEVICE_INFORMATION DeviceInformation)
PVOID BlockIopPartialBlockBuffer
BOOLEAN BlpDeviceCompare(_In_ PBL_DEVICE_DESCRIPTOR Device1, _In_ PBL_DEVICE_DESCRIPTOR Device2)
NTSTATUS TblDoNotPurgeEntry(_In_ PVOID Entry)
struct _BL_LOCAL_DEVICE::@122::@125 RamDisk
struct _BL_DEVICE_IO_INFORMATION BL_DEVICE_IO_INFORMATION
#define ReadBuffer(BaseIoAddress, Buffer, Count)
NTSTATUS BlockIopReadWriteVirtualDevice(_In_ PBL_DEVICE_ENTRY DeviceEntry, _In_ PVOID Buffer, _In_ ULONG Size, _In_ ULONG Operation, _Out_ PULONG BytesRead)
BL_DEVICE_CALLBACKS VirtualDiskDeviceFunctionTable
#define BL_DEVICE_ENTRY_WRITE_ACCESS
IN PVOID IN PVOID IN USHORT IN USHORT Size
PBL_DEVICE_GET_INFORMATION GetInformation
NTSTATUS BlockIoSetInformation(_In_ PBL_DEVICE_ENTRY DeviceEntry, _Out_ PBL_DEVICE_INFORMATION DeviceInformation)
struct _BL_DEVICE_ENTRY * PBL_DEVICE_ENTRY
EFI_BLOCK_READ ReadBlocks
ULONG BlockIoEfiHashFunction(_In_ PBL_HASH_ENTRY Entry, _In_ ULONG TableSize)
BL_HARDDISK_DEVICE HardDisk
NTSTATUS BlHtDelete(_In_ ULONG TableId, _In_ PBL_HASH_ENTRY Entry)
#define BL_BLOCK_DEVICE_PRESENT_FLAG
NTSTATUS BlMmFreeHeap(_In_ PVOID Buffer)
NTSTATUS BlockIoEfiGetChildHandle(_In_ PBL_PROTOCOL_HANDLE ProtocolInterface, _In_ PBL_PROTOCOL_HANDLE ChildProtocolInterface)
ULONG BlockIopReadBlockBufferSize
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PLONGLONG _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_opt_ PULONG_PTR BytesRead
NTSTATUS BlockIoRead(_In_ PBL_DEVICE_ENTRY DeviceEntry, _In_ PVOID Buffer, _In_ ULONG Size, _Out_ PULONG BytesRead)
NTSTATUS BlTblMap(_In_ PVOID *Table, _In_ ULONG Count, _In_ PBL_TBL_MAP_ROUTINE MapCallback)
NTSTATUS BlockIoFirmwareWrite(_In_ PBL_BLOCK_DEVICE BlockDevice, _In_ PVOID Buffer, _In_ ULONGLONG Block, _In_ ULONGLONG BlockCount)
return STATUS_NOT_IMPLEMENTED
#define STATUS_MEDIA_CHANGED
BL_DEVICE_CALLBACKS DiskDeviceFunctionTable
NTSTATUS EfiOpenProtocol(_In_ EFI_HANDLE Handle, _In_ EFI_GUID *Protocol, _Out_ PVOID *Interface)
#define STATUS_INTEGER_OVERFLOW
NTSTATUS BlHtStore(_In_ ULONG TableId, _In_ PBL_HASH_ENTRY Entry, _In_ PVOID Data, _In_ ULONG DataSize)
NTSTATUS BlockIopFirmwareOperation(PBL_DEVICE_ENTRY DeviceEntry, _In_ PVOID Buffer, _In_ ULONGLONG Block, _In_ ULONGLONG BlockCount, _In_ ULONG OperationType)
NTSTATUS BlockIopAllocateAlignedBuffer(_Inout_ PVOID *Buffer, _Inout_ PULONG BufferSize, _In_ ULONG Size, _In_ ULONG Alignment)
union Alignment_ Alignment
BL_HARDDISK_DEVICE VirtualHardDisk
PVOID BlMmAllocateHeap(_In_ SIZE_T Size)
NTSTATUS BlockIoFirmwareOpen(_In_ PBL_DEVICE_DESCRIPTOR Device, _In_ PBL_BLOCK_DEVICE BlockIoDevice)
NTSTATUS BlockIoEfiCreateDeviceEntry(_In_ PBL_DEVICE_ENTRY *DeviceEntry, _Out_ PVOID Handle)
BL_DEVICE_CALLBACKS Callbacks
NTSTATUS BlpIoRegisterDestroyRoutine(_In_ PBL_IO_DESTROY_ROUTINE DestroyRoutine)
#define MEDIA_HARDDRIVE_DP
BL_DEVICE_CALLBACKS FileDeviceFunctionTable
NTSTATUS EfiCloseProtocol(_In_ EFI_HANDLE Handle, _In_ EFI_GUID *Protocol)
PVOID BlockIopAlignedBuffer
#define BL_BLOCK_DEVICE_VIRTUAL_FLAG
NTSTATUS FileDeviceOpen(_In_ PBL_DEVICE_DESCRIPTOR Device, _In_ PBL_DEVICE_ENTRY DeviceEntry)
PBL_ARCH_CONTEXT CurrentExecutionContext
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
BL_DEVICE_CALLBACKS BlockIoDeviceFunctionTable
#define BL_MM_INCLUDE_MAPPED_ALLOCATED
struct _LIST_ENTRY * Flink
_Must_inspect_result_ _In_ ULONG Flags
struct _BL_DEVICE_IO_INFORMATION * PBL_DEVICE_IO_INFORMATION
InternalIoctlParams Argument4
NTSYSAPI ULONG NTAPI RtlEqualMemory(CONST VOID *Source1, CONST VOID *Source2, ULONG Length)
NTSTATUS BlpDeviceResolveLocate(_In_ PBL_DEVICE_DESCRIPTOR InputDevice, _Out_ PBL_DEVICE_DESCRIPTOR *LocateDevice)
NTSTATUS BlDeviceRead(_In_ ULONG DeviceId, _In_ PVOID Buffer, _In_ ULONG Size, _Out_opt_ PULONG BytesRead)
#define NT_SUCCESS(StatCode)
#define STATUS_NO_SUCH_DEVICE
NTSTATUS BlDeviceSetInformation(_In_ ULONG DeviceId, _Out_ PBL_DEVICE_INFORMATION DeviceInformation)
NTSTATUS VhdFileDeviceOpen(_In_ PBL_DEVICE_DESCRIPTOR Device, _In_ PBL_DEVICE_ENTRY DeviceEntry)
NTSTATUS BlockIopFreeAllocations(_In_ PBL_BLOCK_DEVICE BlockDevice)
NTSTATUS DiskOpen(_In_ PBL_DEVICE_DESCRIPTOR Device, _In_ PBL_DEVICE_ENTRY DeviceEntry)
struct _DeviceInfo DeviceInfo
struct _BL_DEVICE_DESCRIPTOR::@126::@129 Partition
PVOID BlTblFindEntry(_In_ PVOID *Table, _In_ ULONG Count, _Out_ PULONG EntryIndex, _In_ PBL_TBL_LOOKUP_ROUTINE Callback, _In_ PVOID Argument1, _In_ PVOID Argument2, _In_ PVOID Argument3, _In_ PVOID Argument4)
ULONG BlockIoFirmwareCdromCount
NTSTATUS BlockIoDeviceTableDestroy(VOID)
PVOID BlockIopReadBlockBuffer
BL_LOCAL_DEVICE_TYPE Type
NTSTATUS BlockIoEfiCompareDevice(_In_ PBL_DEVICE_DESCRIPTOR Device, _In_ EFI_HANDLE Handle)
enum _BL_ARCH_MODE BL_ARCH_MODE
#define SIGNATURE_TYPE_MBR
#define STATUS_UNSUCCESSFUL
#define MEDIA_DEVICE_PATH
NTSTATUS DiskClose(_In_ PBL_DEVICE_ENTRY DeviceEntry)
ULONG BlockIoDeviceTableEntries
NTSTATUS BlockIopReadPhysicalDevice(_In_ PBL_DEVICE_ENTRY DeviceEntry, _In_ PVOID Buffer, _In_ ULONG Size, _Out_ PULONG BytesRead)
struct _BL_LOCAL_DEVICE::@122::@124 FloppyDisk
LIST_ENTRY DmRegisteredDevices
NTSTATUS DeviceTableDestroyEntry(_In_ PVOID Entry, _In_ ULONG DeviceId)
NTSTATUS PartitionOpen(_In_ PBL_DEVICE_DESCRIPTOR Device, _In_ PBL_DEVICE_ENTRY DeviceEntry)
NTSTATUS BlockIopReadUsingPrefetch(_In_ PBL_DEVICE_ENTRY DeviceEntry, _In_ PVOID Buffer, _In_ ULONG BlockCount)
NTSTATUS MmPapFreePages(_In_ PVOID Address, _In_ ULONG WhichList)
#define BL_DEVICE_ENTRY_OPENED
PVOID BlockIopPrefetchBuffer
EFI_GUID EfiDevicePathProtocol
_Must_inspect_result_ _In_ WDFDEVICE Device
EFI_BLOCK_IO_MEDIA * Media
PVOID * BlockIoDeviceTable
NTSTATUS BlockIoEfiReset(VOID)
_In_ ULONG _In_ ULONG Offset
struct _BL_DEVICE_DESCRIPTOR * PBL_DEVICE_DESCRIPTOR
NTSTATUS BlockIopDestroy(VOID)
#define BL_DEVICE_READ_ACCESS
EFI_DEVICE_PATH * EfiIsDevicePathParent(_In_ EFI_DEVICE_PATH *DevicePath1, _In_ EFI_DEVICE_PATH *DevicePath2)
BOOLEAN BlockIoInitialized
NTSTATUS BlDeviceClose(_In_ ULONG DeviceId)
struct _BL_BLOCK_DEVICE * PBL_BLOCK_DEVICE
ULONG BlockIopAlignedBufferSize
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
IN PVOID IN PVOID IN USHORT IN USHORT IN PINTERFACE Interface
#define ROUND_TO_PAGES(Size)
#define InitializeListHead(ListHead)
#define FIELD_OFFSET(t, f)
NTSTATUS BlockIoOpen(_In_ PBL_DEVICE_DESCRIPTOR Device, _In_ PBL_DEVICE_ENTRY DeviceEntry)
VOID EfiPrintf(_In_ PWCHAR Format,...)
NTSTATUS BlockIopBlockInformationCheck(_In_ PBL_BLOCK_DEVICE BlockDevice, _In_opt_ PULONG DesiredSize, _Out_opt_ PULONG Size, _Out_opt_ PULONG OutputAdjustedSize)
NTSTATUS BlockIoEfiFlush(VOID)
EFI_DEVICE_PATH * EfiGetLeafNode(_In_ EFI_DEVICE_PATH *DevicePath)
NTSTATUS BlTblSetEntry(_Inout_ PVOID **Table, _Inout_ PULONG Count, _In_ PVOID Entry, _Out_ PULONG EntryIndex, _In_ PBL_TBL_SET_ROUTINE Callback)
NTSTATUS BcInitialize(VOID)
NTSTATUS BlockIopInitialize(VOID)
NTSTATUS BlockIoDeviceTableDestroyEntry(_In_ PVOID Entry, _In_ ULONG DeviceId)
_Must_inspect_result_ typedef _Out_ PULONG TableSize
struct _BL_REGISTERED_DEVICE BL_REGISTERED_DEVICE
#define RtlZeroMemory(Destination, Length)
_In_ FLT_SET_CONTEXT_OPERATION Operation
ULONG BlockIopPartialBlockBufferSize
#define SIGNATURE_TYPE_GUID
PBL_DEVICE_DESCRIPTOR DeviceDescriptor
#define RtlCopyMemory(Destination, Source, Length)
NTSTATUS BlpDeviceOpen(_In_ PBL_DEVICE_DESCRIPTOR Device, _In_ ULONG Flags, _In_ ULONG Unknown, _Out_ PULONG DeviceId)
ULONG BlockIoFirmwareRawDiskCount
BL_DEVICE_IO_INFORMATION DmDeviceIoInformation
NTSTATUS DeviceTablePurge(_In_ PVOID Entry)
NTSTATUS SpOpen(_In_ PBL_DEVICE_DESCRIPTOR Device, _In_ PBL_DEVICE_ENTRY DeviceEntry)
NTSTATUS BlockIopOperation(_In_ PBL_DEVICE_ENTRY DeviceEntry, _In_ PVOID Buffer, _In_ ULONG BlockCount, _In_ ULONG OperationType)
BL_DEVICE_CALLBACKS SerialPortFunctionTable
NTSTATUS MmPapAllocatePagesInRange(_Inout_ PVOID *PhysicalAddress, _In_ BL_MEMORY_TYPE MemoryType, _In_ ULONGLONG Pages, _In_ ULONG Attributes, _In_ ULONG Alignment, _In_opt_ PBL_ADDRESS_RANGE Range, _In_ ULONG Type)
BL_DEVICE_CALLBACKS Callbacks
NTSTATUS EfiGetNtStatusCode(_In_ EFI_STATUS EfiStatus)
#define BL_HT_VALUE_IS_INLINE
ULONG BlockIoFirmwareRemovableDiskCount
#define BL_DEVICE_ENTRY_READ_ACCESS
base of all file and directory entries
NTSTATUS BlockIoGetGPTDiskSignature(_In_ PBL_DEVICE_ENTRY DeviceEntry, _Out_ PGUID DiskSignature)
PBL_DEVICE_SET_INFORMATION SetInformation
NTSTATUS BlockIopFreeAlignedBuffer(_Inout_ PVOID *Buffer, _Inout_ PULONG BufferSize)
BOOLEAN BlDeviceIsVirtualPartitionDevice(_In_ PBL_DEVICE_DESCRIPTOR InputDevice, _Outptr_ PBL_DEVICE_DESCRIPTOR *VirtualDevice)
#define RtlCompareMemory(s1, s2, l)
BOOLEAN DeviceTableCompare(_In_ PVOID Entry, _In_ PVOID Argument1, _In_ PVOID Argument2, _Inout_ PVOID Argument3, _Inout_ PVOID Argument4)
_In_ WDFMEMORY _Out_opt_ size_t * BufferSize
#define STATUS_DEVICE_NOT_READY
#define BL_BLOCK_DEVICE_REMOVABLE_FLAG
NTSTATUS BlockIoFirmwareRead(_In_ PBL_BLOCK_DEVICE BlockDevice, _In_ PVOID Buffer, _In_ ULONGLONG Block, _In_ ULONGLONG BlockCount)