PnpSetDeviceInterfacePropertyData
INT64 __stdcall PnpSetDeviceInterfacePropertyData(
UNICODE_STRING *SymbolicLinkName,
DEVPROPKEY *PropertyKey,
UINT64 Lcid,
UINT64 Type,
UINT64 Size,
PVOID Data){
unsigned int v6;
_ETHREAD *CurrentThread;
int v10;
INT64 v12;
UINT64 v13;
UINT64 v14;
WCHAR *OutString;
_UNICODE_STRING String;
INT64 result[22];
WCHAR *v18;
v6 = Lcid;
memset((INT64)result, 0i64);
*(_QWORD *)&String.Length = 0i64;
OutString = 0i64;
if( !SymbolicLinkName || !SymbolicLinkName->Buffer || !SymbolicLinkName->Length )
return(unsigned int)-1073741811;
if( v6 )
{
String.MaximumLength = 170;
String.Buffer = (wchar_t *)result;
if( !RtlLCIDToCultureName(v6, &String) )
return(unsigned int)-1073741823;
}
else
{
String.Buffer = 0i64;
}
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)CurrentThread + 242);
ExAcquireResourceExclusiveLite(&PnpDevicePropertyLock, 1u);
v10 = PnpUnicodeStringToWstr(&OutString, 0i64, SymbolicLinkName);
if( v10 >= 0 )
{
LODWORD(v14) = 0;
LODWORD(v13) = (_DWORD)Data;
LODWORD(v12) = Size;
v10 = PiPnpRtlSetObjectProperty(
PiPnpRtlCtx,
OutString,
3ui64,
0i64,
(INT64)String.Buffer,
(INT64)PropertyKey,
v12,
v18,
v13,
v14);
}
PnpUnicodeStringToWstrFree(OutString, SymbolicLinkName);
ExReleaseResourceLite(&PnpDevicePropertyLock);
KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
if( v10 == -1073741275 )
return(unsigned int)-1073741772;
return(unsigned int)v10;
}Referenced by:
IoSetDeviceInterfacePropertyData