VhdiVerifyBootDisk
UINT8 __stdcall VhdiVerifyBootDisk(_DEVICE_OBJECT *DeviceObject){
bool v1;
__int64 v3;
UINT32 OutputBufferLength;
VOID **OutputBuffer;
PIRP *v6;
NTSTATUS Status;
_IO_STATUS_BLOCK IoStatusBlock;
__int128 Object;
__int64 v11;
v1 = 0;
Object = 0i64;
v11 = 0i64;
IoStatusBlock = 0i64;
if( DeviceObject )
{
if( *(&stru_140CF2E80 + 981) )
{
v3 = -1i64;
do
++v3;
while( *(_WORD *)(*(&stru_140CF2E80 + 981) + 2 * v3) );
OutputBufferLength = 2 * v3 + 2;
OutputBuffer = ExAllocatePoolWithTag(0x200ui64, OutputBufferLength, 1113876566i64);
if( OutputBuffer )
{
KeInitializeEvent((INT64)&Object, 1, 0);
v6 = IoBuildDeviceIoControlRequest(
0x2D5928u,
DeviceObject,
0i64,
0,
OutputBuffer,
OutputBufferLength,
0,
(PKEVENT)&Object,
&IoStatusBlock);
if( v6 )
{
Status = IofCallDriver((UINT64)DeviceObject, (UINT64)v6);
if( Status == 259 )
{
KeWaitForSingleObject((UINT64)&Object, 0, 0, 0, 0i64);
Status = IoStatusBlock.Status;
}
if( Status >= 0 )
v1 = wcsicmp((const wchar_t *)OutputBuffer, (const wchar_t *)(*(&stru_140CF2E80 + 981) + 2i64)) == 0;
}
ExFreePoolWithTag(OutputBuffer, 0x42646856u);
}
}
}
return v1;
}Referenced by:
IopCreateArcName