PnpSetDeviceInterfacePropertyData
__int64 __fastcall PnpSetDeviceInterfacePropertyData(
__int64 a1,
UINT64 a2,
unsigned int a3,
__int64 a4,
int a5,
__int64 a6,
UINT64 PropertySize){
INT64 v10;
_ETHREAD *CurrentThread;
int v12;
UINT8 *PropertyBuffer;
PNP_OBJECT_TYPE ObjectType[2];
_UNICODE_STRING String;
char v17[176];
memset(v17, 0i64, 0xAAu);
*(_QWORD *)&String.Length = 0i64;
*(_QWORD *)ObjectType = 0i64;
if( !a1 || !*(_QWORD *)(a1 + 8) || !*(_WORD *)a1 )
return(unsigned int)-1073741811;
if( a3 )
{
String.MaximumLength = 170;
String.Buffer = (wchar_t *)v17;
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);
v12 = PnpUnicodeStringToWstr((__int16 **)ObjectType, 0i64, (unsigned __int16 *)a1);
if( v12 >= 0 )
{
LODWORD(PropertyBuffer) = a5;
v12 = PiPnpRtlSetObjectProperty(
*(&stru_140CF2E80 + 607),
ObjectType[0],
(VOID *)3,
0i64,
(_DEVPROPKEY *)String.Buffer,
a2,
PropertyBuffer,
PropertySize);
}
PnpUnicodeStringToWstrFree(*(void **)ObjectType, a1);
ExReleaseResourceLite((PERESOURCE)((char *)&PnpReplaceEvent + 7968));
KeLeaveCriticalRegionThread(KeGetCurrentThread());
if( v12 == -1073741275 )
return(unsigned int)-1073741772;
return(unsigned int)v12;
}Referenced by:
IoSetDeviceInterfacePropertyData