PipMigratePnpState
NTSTATUS __stdcall PipMigratePnpState(){
char v0;
HPNPCTX *v1;
NTSTATUS v2;
HPNPCTX *v3;
INT64 v4;
INT64 v5;
int CachedContextBaseKey;
NTSTATUS v8;
NTSTATUS v9;
NTSTATUS v10;
NTSTATUS v11;
__int64 v12;
int v13;
NTSTATUS MatchingDeviceList;
UINT64 DesiredAccess;
UINT64 DesiredAccessa;
UINT64 DesiredAccessb;
int DesiredAccessc;
UINT64 v19;
VOID *MatchCallbackContext;
WCHAR *Buffer;
_HANDLE v22[2];
_HANDLE v23[2];
_HANDLE v24[2];
int a6;
__int64 Source2;
INT64 v27;
HPNPCTX *hPnpCtx;
_HANDLE v29[2];
__int64 Source1[8];
UINT64 DataSize;
UINT64 RegType;
int Data;
int v34;
LODWORD(DesiredAccess) = 131103;
*(_QWORD *)v23 = 0i64;
*(_QWORD *)v24 = 0i64;
v27 = 0i64;
v0 = 0;
LODWORD(RegType) = 0;
v1 = 0i64;
Data = 0;
v34 = 0;
*(_QWORD *)v22 = 0i64;
Source1[0] = 0i64;
Source2 = 0i64;
*(_QWORD *)v29 = 0i64;
hPnpCtx = 0i64;
a6 = 0;
v2 = PnpCtxRegOpenKey(
*(&stru_140CF2E80 + 607),
(VOID *)0x80000002i64,
(WCHAR *)L"System\\Setup\\Upgrade\\PnP",
0i64,
DesiredAccess,
(VOID **)v23);
CachedContextBaseKey = v2;
if( v2 == -1073741772 )
goto LABEL_2;
if( v2 >= 0 )
{
LODWORD(DataSize) = 4;
v8 = PnpCtxRegQueryValue(v3, *(VOID **)v23, (WCHAR *)L"MigrationStatus", &RegType, &Data, &DataSize);
CachedContextBaseKey = v8;
if( v8 != -1073741772 )
{
if( v8 < 0 )
goto LABEL_3;
if( (_DWORD)RegType != 4 || (_DWORD)DataSize != 4 )
{
CachedContextBaseKey = -1073741823;
goto LABEL_47;
}
}
LODWORD(DesiredAccessa) = 131103;
v9 = PnpCtxRegOpenKey(
*(&stru_140CF2E80 + 607),
*(VOID **)v23,
(WCHAR *)L"CurrentControlSet",
0i64,
DesiredAccessa,
(VOID **)v24);
CachedContextBaseKey = v9;
if( v9 == -1073741772 )
{
LABEL_2:
CachedContextBaseKey = 0;
goto LABEL_3;
}
if( v9 >= 0 )
{
LODWORD(DesiredAccessa) = 131097;
CachedContextBaseKey = PnpCtxRegOpenKey(
*(&stru_140CF2E80 + 607),
*(VOID **)v24,
(WCHAR *)L"Control\\DeviceMigration",
0i64,
DesiredAccessa,
(VOID **)v22);
if( CachedContextBaseKey >= 0 )
{
LODWORD(DataSize) = 8;
CachedContextBaseKey = PnpCtxRegQueryValue(
v3,
*(VOID **)v22,
(WCHAR *)L"MigrationTime",
&RegType,
&Source2,
&DataSize);
if( CachedContextBaseKey >= 0 )
{
if( (_DWORD)RegType == 3 && (_DWORD)DataSize == 8 )
{
PnpCtxRegCloseKey(
v3,
*(VOID **)v22,
v4,
v5,
DesiredAccessa,
v19,
(INT64)MatchCallbackContext,
(INT64)Buffer);
*(_QWORD *)v22 = 0i64;
CachedContextBaseKey = PnpCtxGetCachedContextBaseKey(
*(&stru_140CF2E80 + 607),
PNPCTX_BASE_KEY_TYPE_CONTROLSET,
(VOID **)&v27);
if( CachedContextBaseKey < 0 )
goto LABEL_3;
LODWORD(DesiredAccessa) = 131078;
CachedContextBaseKey = PnpCtxRegCreateKey(
*(&stru_140CF2E80 + 607),
(VOID *)v27,
(WCHAR *)L"Control\\DeviceMigration",
0i64,
DesiredAccessa,
0i64,
(VOID **)v22,
0i64);
if( CachedContextBaseKey < 0 )
goto LABEL_3;
LODWORD(DataSize) = 8;
v10 = PnpCtxRegQueryValue(v3, *(VOID **)v22, (WCHAR *)L"MigrationTime", &RegType, Source1, &DataSize);
CachedContextBaseKey = v10;
if( v10 == -1073741772 )
goto LABEL_32;
if( v10 < 0 )
goto LABEL_3;
if( (_DWORD)RegType == 3 && (_DWORD)DataSize == 8 )
{
if( RtlCompareMemory(Source1, &Source2, 8) == (_SIZE_T *)8 )
{
CachedContextBaseKey = -1073741791;
goto LABEL_3;
}
LABEL_32:
LODWORD(v19) = 4;
Data = 259;
CachedContextBaseKey = PnpCtxRegSetValue(
v3,
*(VOID **)v23,
(WCHAR *)L"MigrationStatus",
4ui64,
&Data,
v19);
if( CachedContextBaseKey < 0 )
goto LABEL_3;
LODWORD(v19) = 8;
CachedContextBaseKey = PnpCtxRegSetValue(
v3,
*(VOID **)v22,
(WCHAR *)L"MigrationTime",
3ui64,
&Source2,
v19);
if( CachedContextBaseKey < 0 )
goto LABEL_3;
LODWORD(DataSize) = 4;
v0 = 1;
CachedContextBaseKey = PnpCtxRegQueryValue(
v3,
*(VOID **)v23,
(WCHAR *)L"TargetVersion",
&RegType,
&v34,
&DataSize);
if( CachedContextBaseKey < 0 )
goto LABEL_50;
if( (_DWORD)RegType != 4 || (_DWORD)DataSize != 4 )
{
CachedContextBaseKey = -1073741823;
goto LABEL_50;
}
if( (v34 & 0xFFFF0000) != 167772160 )
{
CachedContextBaseKey = -1073741735;
goto LABEL_50;
}
CachedContextBaseKey = PnpCtxRegCopyTree(v3, *(VOID **)v24, 0i64, (VOID *)v27, 0i64);
if( CachedContextBaseKey < 0 )
goto LABEL_50;
LODWORD(DesiredAccessb) = 131097;
v11 = PnpCtxRegOpenKey(
*(&stru_140CF2E80 + 607),
*(VOID **)v24,
(WCHAR *)L"Services",
0i64,
DesiredAccessb,
(VOID **)v29);
CachedContextBaseKey = v11;
if( v11 != -1073741772 )
{
if( v11 < 0 )
goto LABEL_50;
CachedContextBaseKey = PnpCtxRegEnumKeyWithCallback(
*(&stru_140CF2E80 + 607),
*(VOID **)v29,
(INT64)PipMigrateCleanServiceCallback,
0i64);
if( CachedContextBaseKey < 0 )
goto LABEL_50;
}
v13 = PnpCtxOpenMachine(
(__int64)v3,
0i64,
v12,
(VOID *)0xFFFFFFFFFFFFFFFFi64,
DesiredAccessc,
v19,
&hPnpCtx);
v1 = hPnpCtx;
CachedContextBaseKey = v13;
if( v13 < 0 )
goto LABEL_50;
LODWORD(MatchCallbackContext) = 0;
MatchingDeviceList = CmGetMatchingDeviceList(
hPnpCtx,
(UINT8 *)PipMigrateResetDeviceCallback,
0i64,
0i64,
CM_OBJECT_TYPE_NONE,
&a6,
MatchCallbackContext,
Buffer,
*(UINT64 *)v22,
*(UINT64 **)v23,
*(UINT64 *)v24);
CachedContextBaseKey = MatchingDeviceList;
if( MatchingDeviceList == -1073741789 )
{
CachedContextBaseKey = 0;
goto LABEL_50;
}
if( MatchingDeviceList < 0 )
goto LABEL_50;
LABEL_47:
if( !v0 )
{
LABEL_51:
if( v1 )
PnpCtxCloseMachine(v1);
goto LABEL_3;
}
LABEL_50:
LODWORD(v19) = 4;
Data = CachedContextBaseKey;
PnpCtxRegSetValue(v3, *(VOID **)v23, (WCHAR *)L"MigrationStatus", 4ui64, &Data, v19);
goto LABEL_51;
}
}
CachedContextBaseKey = -1073741823;
}
}
}
}
LABEL_3:
if( *(_QWORD *)v29 )
PnpCtxRegCloseKey(v3, *(VOID **)v29, v4, v5, DesiredAccessa, v19, (INT64)MatchCallbackContext, (INT64)Buffer);
if( *(_QWORD *)v22 )
PnpCtxRegCloseKey(v3, *(VOID **)v22, v4, v5, DesiredAccessa, v19, (INT64)MatchCallbackContext, (INT64)Buffer);
if( *(_QWORD *)v24 )
PnpCtxRegCloseKey(v3, *(VOID **)v24, v4, v5, DesiredAccessa, v19, (INT64)MatchCallbackContext, (INT64)Buffer);
if( *(_QWORD *)v23 )
PnpCtxRegCloseKey(v3, *(VOID **)v23, v4, v5, DesiredAccessa, v19, (INT64)MatchCallbackContext, (INT64)Buffer);
return CachedContextBaseKey;
}Referenced by:
IopInitializePlugPlayServices