IoSetDevicePropertyData
NTSTATUS __stdcall IoSetDevicePropertyData(
_DEVICE_OBJECT *Pdo,
_DEVPROPKEY *PropertyKey,
UINT64 Lcid,
UINT64 Flags,
UINT64 Type,
UINT64 Size,
VOID *Data){
_DWORD *DeviceNode;
_DRIVER_OBJECT *DriverObject;
_UNICODE_STRING *p_DriverName;
VOID **v12;
VOID **v13;
_DEVOBJ_EXTENSION *DeviceObjectExtension;
_WORD *v15;
__int64 v16;
_WORD *v17;
__int64 v18;
if( !Pdo )
goto LABEL_16;
DeviceNode = Pdo->DeviceObjectExtension->DeviceNode;
if( !DeviceNode || (DeviceNode[99] & 0x20000) != 0 )
{
IoAddTriageDumpDataBlock(Pdo, (_BYTE *)Pdo->Size);
DriverObject = Pdo->DriverObject;
if( DriverObject )
{
IoAddTriageDumpDataBlock(DriverObject, (_BYTE *)(unsigned int)DriverObject->Size);
p_DriverName = &Pdo->DriverObject->DriverName;
if( p_DriverName->Length )
{
IoAddTriageDumpDataBlock(p_DriverName, (_BYTE *)2);
IoAddTriageDumpDataBlock(Pdo->DriverObject->DriverName.Buffer, (_BYTE *)Pdo->DriverObject->DriverName.Length);
}
}
v12 = (VOID **)Pdo->DeviceObjectExtension->DeviceNode;
if( v12 )
{
v13 = v12 + 5;
IoAddTriageDumpDataBlock(v12, (_BYTE *)0x310);
if( *(_WORD *)v13 )
{
IoAddTriageDumpDataBlock(v13, (_BYTE *)2);
IoAddTriageDumpDataBlock(v13[1], (_BYTE *)*(unsigned __int16 *)v13);
}
DeviceObjectExtension = Pdo->DeviceObjectExtension;
v15 = (char *)DeviceObjectExtension->DeviceNode + 56;
if( *v15 )
{
IoAddTriageDumpDataBlock(v15, (_BYTE *)2);
IoAddTriageDumpDataBlock(
*((VOID **)Pdo->DeviceObjectExtension->DeviceNode + 8),
(_BYTE *)*((unsigned __int16 *)Pdo->DeviceObjectExtension->DeviceNode + 28));
DeviceObjectExtension = Pdo->DeviceObjectExtension;
}
v16 = *((_QWORD *)DeviceObjectExtension->DeviceNode + 2);
if( v16 )
{
v17 = (_WORD *)(v16 + 56);
if( *v17 )
{
IoAddTriageDumpDataBlock(v17, (_BYTE *)2);
v18 = *((_QWORD *)Pdo->DeviceObjectExtension->DeviceNode + 2);
IoAddTriageDumpDataBlock(*(VOID **)(v18 + 64), (_BYTE *)*(unsigned __int16 *)(v18 + 56));
}
}
}
LABEL_16:
KeBugCheckEx(0xCAu, (PVOID)2, Pdo, 0i64, 0i64);
}
return PnpSetDevicePropertyData(
(__int64)Pdo,
(UINT64)PropertyKey,
Lcid,
(unsigned int)Lcid,
Data != 0i64 ? Type : 0,
Data != 0i64 ? Size : 0,
Data);
}Referenced by:
HalpInterruptConnect