PnpSetPropertyWorker
__int64 __fastcall PnpSetPropertyWorker(
__int64 a1,
VOID *a2,
const wchar_t *a3,
__int64 a4,
int a5,
__int64 a6,
UINT64 a7){
__int16 v7;
int v11;
NTSTATUS v12;
NTSTATUS v13;
NTSTATUS v14;
__int64 v16;
VOID *v17;
__int64 v18;
VOID *v19;
UINT64 dwFlags;
UINT64 dwFlagsa;
UINT64 dwFlagsb;
UINT64 dwFlagsc;
int pszFormat;
VOID *hKey;
INT64 v26;
UINT64 pRegDisposition;
VOID *phkResult;
VOID *v29;
VOID *v30;
_SIZE_T pcchLength;
WCHAR Dst[12];
__int16 pszDest[40];
v7 = 0;
v29 = a2;
v30 = (VOID *)a6;
pRegDisposition = 0i64;
v26 = 0i64;
hKey = 0i64;
phkResult = 0i64;
if( (unsigned int)a7 > 0x7FFFFFFF )
return(unsigned int)-1073741811;
if( a3 )
{
v11 = RtlUnalignedStringCchLengthW(a3, 85, &pcchLength);
if( v11 < 0 )
return(unsigned int)v11;
}
if( a5 == 25 && a3 && *a3 != v7 )
return(unsigned int)-1073741811;
LODWORD(dwFlags) = 2048;
if( RtlStringCchPrintfExW(
(WCHAR *)pszDest,
0x27ui64,
0i64,
0i64,
dwFlags,
(WCHAR *)L"{%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}") < 0 )
goto LABEL_26;
swprintf_s(Dst, 9ui64, (WCHAR *)L"%04lX", *(unsigned int *)(a4 + 16));
v11 = PnpOpenPropertiesKey(a1, v29, 0i64, 4u, 1, pszFormat, (INT64)&v26);
if( v11 < 0 )
{
v26 = 0i64;
goto LABEL_13;
}
LODWORD(dwFlagsa) = 4;
v12 = PnpCtxRegCreateKey(
(HPNPCTX *)a1,
(VOID *)v26,
(WCHAR *)pszDest,
0i64,
dwFlagsa,
0i64,
&hKey,
(UINT64 *)((char *)&pRegDisposition + 4));
if( v12 == -1073741444 )
goto LABEL_26;
if( v12 < 0 )
{
hKey = 0i64;
v11 = v12;
goto LABEL_13;
}
LODWORD(dwFlagsb) = 65542;
v13 = PnpCtxRegCreateKey((HPNPCTX *)a1, hKey, Dst, 0i64, dwFlagsb, 0i64, &phkResult, &pRegDisposition);
if( v13 == -1073741444 )
{
LABEL_26:
v11 = -1073741595;
LABEL_13:
if( phkResult )
{
ZwClose((_HANDLE)phkResult);
if( v11 < 0 && (_DWORD)pRegDisposition == 1 )
{
if( a1 && (v16 = *(_QWORD *)(a1 + 224)) != 0 )
v17 = *(VOID **)(v16 + 8);
else
v17 = 0i64;
RegRtlDeleteTreeInternal(hKey, Dst, v17, 0);
}
}
goto LABEL_15;
}
if( v13 >= 0 )
{
LODWORD(dwFlagsc) = a7;
v14 = RegRtlSetValue(phkResult, a3, a5 | 0xFFFF0000, v30, dwFlagsc);
if( v14 != -1073741444 )
{
if( v14 < 0 )
v11 = v14;
goto LABEL_13;
}
goto LABEL_26;
}
phkResult = 0i64;
v11 = v13;
LABEL_15:
if( hKey )
{
ZwClose((_HANDLE)hKey);
if( v11 < 0 && HIDWORD(pRegDisposition) == 1 )
{
if( a1 && (v18 = *(_QWORD *)(a1 + 224)) != 0 )
v19 = *(VOID **)(v18 + 8);
else
v19 = 0i64;
RegRtlDeleteTreeInternal((VOID *)v26, (WCHAR *)pszDest, v19, 0);
}
}
if( v26 )
ZwClose(v26);
return(unsigned int)v11;
}Referenced by:
PnpSetGenericStoreProperty