SbpAddTransportToInstance
INT64 __fastcall SbpAddTransportToInstance(){
char *v0;
NTSTATUS DeviceObjectPointer;
PFILE_OBJECT v2;
unsigned int Status;
char *PoolWithTag;
_DEVICE_OBJECT *v5;
_IRP *v6;
IRP *v7;
__int64 v8;
_DEVICE_OBJECT *v9;
UINT64 OutputBufferLength;
_IO_STATUS_BLOCK IoStatusBlock;
_KEVENT Object;
PVOID ReturnAddress;
PDEVICE_OBJECT DeviceObject;
PFILE_OBJECT FileObject;
FileObject = 0i64;
DeviceObject = 0i64;
memset(&Object, 0, sizeof(Object));
v0 = 0i64;
IoStatusBlock = 0i64;
DeviceObjectPointer = IoGetDeviceObjectPointer(
(UNICODE_STRING *)InstanceName,
0x10000000ui64,
&FileObject,
&DeviceObject);
v2 = FileObject;
Status = DeviceObjectPointer;
if( DeviceObjectPointer >= 0 )
{
PoolWithTag = (char *)ExAllocatePoolWithTag(NonPagedPoolNx, 0xD0ui64, 0x42626D53ui64);
v0 = PoolWithTag;
if( !PoolWithTag )
goto LABEL_3;
memset((INT64)(PoolWithTag + 12), 0i64);
*(_DWORD *)v0 = 16;
*((_DWORD *)v0 + 1) = 2;
*((_DWORD *)v0 + 2) = 192;
*(_OWORD *)(v0 + 12) = *(_OWORD *)L"\\Device\\VMBus\\{4d12e519-17a0-4ae4-8eaa-5270fc6abdb7}-{dcc079ae-60ba-4d07-847c-3"
"493609c0870}-0000";
*(_OWORD *)(v0 + 28) = *(_OWORD *)L"VMBus\\{4d12e519-17a0-4ae4-8eaa-5270fc6abdb7}-{dcc079ae-60ba-4d07-847c-3493609c0870}-0000";
*(_OWORD *)(v0 + 44) = *(_OWORD *)L"d12e519-17a0-4ae4-8eaa-5270fc6abdb7}-{dcc079ae-60ba-4d07-847c-3493609c0870}-0000";
*(_OWORD *)(v0 + 60) = *(_OWORD *)L"17a0-4ae4-8eaa-5270fc6abdb7}-{dcc079ae-60ba-4d07-847c-3493609c0870}-0000";
*(_OWORD *)(v0 + 76) = *(_OWORD *)L"4-8eaa-5270fc6abdb7}-{dcc079ae-60ba-4d07-847c-3493609c0870}-0000";
*(_OWORD *)(v0 + 92) = *(_OWORD *)L"270fc6abdb7}-{dcc079ae-60ba-4d07-847c-3493609c0870}-0000";
*(_OWORD *)(v0 + 108) = *(_OWORD *)L"db7}-{dcc079ae-60ba-4d07-847c-3493609c0870}-0000";
v5 = DeviceObject;
*(_OWORD *)(v0 + 124) = *(_OWORD *)L"c079ae-60ba-4d07-847c-3493609c0870}-0000";
*(_OWORD *)(v0 + 140) = *(_OWORD *)L"0ba-4d07-847c-3493609c0870}-0000";
*(_OWORD *)(v0 + 156) = *(_OWORD *)L"-847c-3493609c0870}-0000";
*(_OWORD *)(v0 + 172) = *(_OWORD *)L"93609c0870}-0000";
*(_OWORD *)(v0 + 188) = *(_OWORD *)L"70}-0000";
Object.Header.WaitListHead.Blink = &Object.Header.WaitListHead;
LOWORD(Object.Header.Lock) = 1;
Object.Header.WaitListHead.Flink = &Object.Header.WaitListHead;
LODWORD(OutputBufferLength) = 0;
Object.Header.Size = 6;
Object.Header.SignalState = 0;
v6 = IopBuildDeviceIoControlRequest(
0x1401B0ui64,
v5,
v0,
0xD0ui64,
0i64,
OutputBufferLength,
0,
&Object,
&IoStatusBlock,
ReturnAddress);
v7 = v6;
if( v6 )
{
v8 = *((_QWORD *)v6 + 23);
v9 = DeviceObject;
*(_QWORD *)(v8 - 24) = v2;
*(_BYTE *)(v8 - 72) = 13;
Status = IofCallDriver(v9, v7);
if( Status == 259 )
{
KeWaitForSingleObject(&Object, Executive, 0, 0, 0i64);
Status = IoStatusBlock.Status;
}
}
else
{
LABEL_3:
Status = -1073741670;
}
}
if( v2 )
ObfDereferenceObjectWithTag(v2, 0x746C6644ui64);
if( v0 )
ExFreeHeapPool(v0);
return Status;
}Referenced by:
IopInitializeBootDrivers