PnpSetDevicePropertyData
__int64 __fastcall PnpSetDevicePropertyData(
__int64 a1,
UINT64 a2,
unsigned int a3,
__int64 a4,
int a5,
size_t a6,
const VOID *PropertySize){
INT64 v10;
__int64 v11;
_ETHREAD *CurrentThread;
int v13;
__int64 v15;
UINT8 *PropertyBuffer;
_UNICODE_STRING String;
char v18[176];
memset(v18, 0i64, 0xAAu);
*(_QWORD *)&String.Length = 0i64;
if( a1 )
v11 = *(_QWORD *)(*(_QWORD *)(a1 + 312) + 40i64);
else
v11 = 0i64;
if( !v11 || !*(_QWORD *)(v11 + 48) )
return(unsigned int)-1073741808;
if( a3 )
{
String.MaximumLength = 170;
String.Buffer = (wchar_t *)v18;
if( !RtlLCIDToCultureName(a3, (INT64)&String) )
return(unsigned int)-1073741823;
}
else
{
String.Buffer = 0i64;
}
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--CurrentThread->Tcb.KernelApcDisable;
ExAcquireResourceExclusiveLite((UINT64)&PnpReplaceEvent + 7968, 1, v10);
LODWORD(PropertyBuffer) = a5;
v13 = PiPnpRtlSetObjectProperty(
*(&stru_140CF2E80 + 607),
*(_QWORD *)(v11 + 48),
(VOID *)1,
0i64,
(_DEVPROPKEY *)String.Buffer,
a2,
PropertyBuffer,
(UINT64)PropertySize);
if( v13 >= 0 && *(_DWORD *)(a2 + 16) == 2 )
{
v15 = *(_QWORD *)a2 - *(_QWORD *)&INTERRUPT_CONNECTION_DATA_PKEY.fmtid.Data1;
if( *(_QWORD *)a2 == *(_QWORD *)&INTERRUPT_CONNECTION_DATA_PKEY.fmtid.Data1 )
v15 = *(_QWORD *)(a2 + 8) - *(_QWORD *)INTERRUPT_CONNECTION_DATA_PKEY.fmtid.Data4;
if( !v15 )
v13 = PnpSetInterruptInformation(a1, PropertySize, a6);
}
ExReleaseResourceLite((PERESOURCE)((char *)&PnpReplaceEvent + 7968));
KeLeaveCriticalRegionThread(KeGetCurrentThread());
if( v13 == -1073741275 )
v13 = -1073741772;
if( *(int *)(v11 + 300) >= 771 )
PnpSetDeviceInstancePropertyChangeEvent(v11);
return(unsigned int)v13;
}Referenced by:
IoSetDevicePropertyData