IoSetDevicePropertyData
NTSTATUS __stdcall IoSetDevicePropertyData(
PDEVICE_OBJECT Pdo,
const DEVPROPKEY *PropertyKey,
LCID Lcid,
ULONG Flags,
DEVPROPTYPE Type,
ULONG Size,
PVOID Data){
__int64 v8;
__int16 *v10;
_WORD *v11;
PVOID *v12;
PVOID *v13;
__int64 v14;
_WORD *v15;
__int64 v16;
_WORD *v17;
__int64 v18;
ULONG_PTR BugCheckParameter4;
PVOID v20;
if( !Pdo )
goto LABEL_16;
v8 = *(_QWORD *)(*((_QWORD *)Pdo + 39) + 40i64);
if( !v8 || (*(_DWORD *)(v8 + 396) & 0x20000) != 0 )
{
IoAddTriageDumpDataBlock(Pdo, *((unsigned __int16 *)Pdo + 1));
v10 = (__int16 *)*((_QWORD *)Pdo + 1);
if( v10 )
{
IoAddTriageDumpDataBlock(v10, (unsigned int)v10[1]);
v11 = (_WORD *)(*((_QWORD *)Pdo + 1) + 56i64);
if( *v11 )
{
IoAddTriageDumpDataBlock(v11, 2ui64);
IoAddTriageDumpDataBlock(
*(PVOID *)(*((_QWORD *)Pdo + 1) + 64i64),
*(unsigned __int16 *)(*((_QWORD *)Pdo + 1) + 56i64));
}
}
v12 = *(PVOID **)(*((_QWORD *)Pdo + 39) + 40i64);
if( v12 )
{
v13 = v12 + 5;
IoAddTriageDumpDataBlock(v12, 0x310ui64);
if( *(_WORD *)v13 )
{
IoAddTriageDumpDataBlock(v13, 2ui64);
IoAddTriageDumpDataBlock(v13[1], *(unsigned __int16 *)v13);
}
v14 = *((_QWORD *)Pdo + 39);
v15 = (_WORD *)(*(_QWORD *)(v14 + 40) + 56i64);
if( *v15 )
{
IoAddTriageDumpDataBlock(v15, 2ui64);
IoAddTriageDumpDataBlock(
*(PVOID *)(*(_QWORD *)(*((_QWORD *)Pdo + 39) + 40i64) + 64i64),
*(unsigned __int16 *)(*(_QWORD *)(*((_QWORD *)Pdo + 39) + 40i64) + 56i64));
v14 = *((_QWORD *)Pdo + 39);
}
v16 = *(_QWORD *)(*(_QWORD *)(v14 + 40) + 16i64);
if( v16 )
{
v17 = (_WORD *)(v16 + 56);
if( *v17 )
{
IoAddTriageDumpDataBlock(v17, 2ui64);
v18 = *(_QWORD *)(*(_QWORD *)(*((_QWORD *)Pdo + 39) + 40i64) + 16i64);
IoAddTriageDumpDataBlock(*(PVOID *)(v18 + 64), *(unsigned __int16 *)(v18 + 56));
}
}
}
LABEL_16:
KeBugCheckEx(0xCAu, 2ui64, (ULONG_PTR)Pdo, 0i64, 0i64);
}
LODWORD(v20) = Data != 0i64 ? Size : 0;
LODWORD(BugCheckParameter4) = Data != 0i64 ? Type : 0;
return PnpSetDevicePropertyData(Pdo, (DEVPROPKEY *)PropertyKey, Lcid, Lcid, BugCheckParameter4, v20);
}Referenced by:
HalpInterruptConnect