ExpUpdateProductSuiteTypeInRegistry
VOID __stdcall ExpUpdateProductSuiteTypeInRegistry(PVOID KeyHandle){
VOID *v1;
unsigned int v2;
WCHAR v3;
WCHAR v4;
__int64 v5;
__int64 v6;
int v7;
NTSTATUS v8;
WCHAR v9;
INT64 *v10;
__int64 v11;
unsigned int v12;
NTSTATUS v13;
const WCHAR *v14;
__int64 v15;
unsigned int v16;
__int64 v17;
unsigned int v18;
__int64 v19;
unsigned int v20;
__int64 v21;
unsigned int v22;
__int64 v23;
unsigned int v24;
__int64 v25;
unsigned int v26;
__int64 v27;
unsigned int v28;
__int64 v29;
unsigned int v30;
__int64 v31;
unsigned int v32;
__int64 v33;
unsigned int v34;
__int64 v35;
unsigned int v36;
__int64 v37;
unsigned int v38;
__int64 v39;
unsigned int v40;
unsigned int v41;
UINT64 v42;
struct _UNICODE_STRING Data;
struct _UNICODE_STRING DestinationString_8;
UINT8 result[768];
v1 = ExpProductTypeKey;
v2 = 758;
DestinationString_8 = 0i64;
Data = 0i64;
memset((INT64)result, 0i64);
if( ExpSetupModeDetected )
return;
RtlInitUnicodeString(&DestinationString_8, L"ProductType", v3);
v5 = -1i64;
if( KUSER_SHARED_DATA.NtProductType == NtProductLanManNt )
{
v14 = L"LanmanNT";
}
else
{
if( KUSER_SHARED_DATA.NtProductType != NtProductServer )
{
RtlInitUnicodeString(&Data, L"WinNT", v4);
v6 = -1i64;
do
++v6;
while( aWinnt_0[v6] );
v7 = 2 * v6 + 2;
goto LABEL_7;
}
v14 = L"ServerNT";
}
RtlInitUnicodeString(&Data, v14, v4);
v7 = 18;
LABEL_7:
LODWORD(v42) = v7;
v8 = NtSetValueKey(v1, &DestinationString_8, 0i64, 1ui64, Data.Buffer, v42);
if( v8 < 0 )
KeBugCheckEx(0x9Au, 0x11ui64, (unsigned int)v8, 1ui64, 0i64);
RtlInitUnicodeString(&DestinationString_8, L"ProductSuite", v9);
v10 = (INT64 *)result;
if( ExVerifySuite(SmallBusiness) )
{
v15 = -1i64;
do
++v15;
while( aSmallBusiness[v15] );
v16 = 2 * v15 + 2;
if( v16 < 0x2F6 )
{
memmove(result, (UINT8 *)L"Small Business", v16);
v10 = (INT64 *)&result[v16];
v2 = 758 - v16;
}
}
if( ExVerifySuite(Enterprise) )
{
v17 = -1i64;
do
++v17;
while( aEnterprise[v17] );
v18 = 2 * v17 + 2;
if( v2 > v18 )
{
memmove((UINT8 *)v10, (UINT8 *)L"Enterprise", v18);
v10 = (INT64 *)((char *)v10 + v18);
v2 -= v18;
}
}
if( ExVerifySuite(BackOffice) )
{
v19 = -1i64;
do
++v19;
while( aBackoffice[v19] );
v20 = 2 * v19 + 2;
if( v2 > v20 )
{
memmove((UINT8 *)v10, (UINT8 *)L"BackOffice", v20);
v10 = (INT64 *)((char *)v10 + v20);
v2 -= v20;
}
}
if( ExVerifySuite(CommunicationServer) )
{
v21 = -1i64;
do
++v21;
while( aCommunications[v21] );
v22 = 2 * v21 + 2;
if( v2 > v22 )
{
memmove((UINT8 *)v10, (UINT8 *)L"CommunicationServer", v22);
v10 = (INT64 *)((char *)v10 + v22);
v2 -= v22;
}
}
if( ExVerifySuite(TerminalServer) )
{
v11 = -1i64;
do
++v11;
while( aTerminalServer_0[v11] );
v12 = 2 * v11 + 2;
if( v2 > v12 )
{
memmove((UINT8 *)v10, (UINT8 *)L"Terminal Server", v12);
v10 = (INT64 *)((char *)v10 + v12);
v2 -= v12;
}
}
if( ExVerifySuite(SmallBusinessRestricted) )
{
v23 = -1i64;
do
++v23;
while( aSmallBusinessR[v23] );
v24 = 2 * v23 + 2;
if( v2 > v24 )
{
memmove((UINT8 *)v10, (UINT8 *)L"Small Business(Restricted)", v24);
v10 = (INT64 *)((char *)v10 + v24);
v2 -= v24;
}
}
if( ExVerifySuite(EmbeddedNT) )
{
v25 = -1i64;
do
++v25;
while( aEmbeddednt[v25] );
v26 = 2 * v25 + 2;
if( v2 > v26 )
{
memmove((UINT8 *)v10, (UINT8 *)L"EmbeddedNT", v26);
v10 = (INT64 *)((char *)v10 + v26);
v2 -= v26;
}
}
if( ExVerifySuite(DataCenter) )
{
v27 = -1i64;
do
++v27;
while( aDatacenter[v27] );
v28 = 2 * v27 + 2;
if( v2 > v28 )
{
memmove((UINT8 *)v10, (UINT8 *)L"DataCenter", v28);
v10 = (INT64 *)((char *)v10 + v28);
v2 -= v28;
}
}
if( ExVerifySuite(Personal) )
{
v29 = -1i64;
do
++v29;
while( aPersonal[v29] );
v30 = 2 * v29 + 2;
if( v2 > v30 )
{
memmove((UINT8 *)v10, (UINT8 *)L"Personal", v30);
v10 = (INT64 *)((char *)v10 + v30);
v2 -= v30;
}
}
if( ExVerifySuite(Blade) )
{
v31 = -1i64;
do
++v31;
while( aBlade[v31] );
v32 = 2 * v31 + 2;
if( v2 > v32 )
{
memmove((UINT8 *)v10, (UINT8 *)L"Blade", v32);
v10 = (INT64 *)((char *)v10 + v32);
v2 -= v32;
}
}
if( ExVerifySuite(EmbeddedRestricted) )
{
v33 = -1i64;
do
++v33;
while( aEmbeddedRestri[v33] );
v34 = 2 * v33 + 2;
if( v2 > v34 )
{
memmove((UINT8 *)v10, (UINT8 *)L"Embedded(Restricted)", v34);
v10 = (INT64 *)((char *)v10 + v34);
v2 -= v34;
}
}
if( ExVerifySuite(SecurityAppliance) )
{
v35 = -1i64;
do
++v35;
while( aSecurityApplia[v35] );
v36 = 2 * v35 + 2;
if( v2 > v36 )
{
memmove((UINT8 *)v10, (UINT8 *)L"Security Appliance", v36);
v10 = (INT64 *)((char *)v10 + v36);
v2 -= v36;
}
}
if( ExVerifySuite(StorageServer) )
{
v37 = -1i64;
do
++v37;
while( aStorageServer[v37] );
v38 = 2 * v37 + 2;
if( v2 > v38 )
{
memmove((UINT8 *)v10, (UINT8 *)L"Storage Server", v38);
v10 = (INT64 *)((char *)v10 + v38);
v2 -= v38;
}
}
if( ExVerifySuite(ComputeServer) )
{
v39 = -1i64;
do
++v39;
while( aComputeServer[v39] );
v40 = 2 * v39 + 2;
if( v2 > v40 )
{
memmove((UINT8 *)v10, (UINT8 *)L"Compute Server", v40);
v10 = (INT64 *)((char *)v10 + v40);
v2 -= v40;
}
}
if( ExVerifySuite(PhoneNT) )
{
do
++v5;
while( aPhonent[v5] );
v41 = 2 * v5 + 2;
if( v2 > v41 )
{
memmove((UINT8 *)v10, (UINT8 *)L"PhoneNT", v41);
v2 -= v41;
}
}
LODWORD(v42) = 760 - v2;
v13 = NtSetValueKey(v1, &DestinationString_8, 0i64, 7ui64, result, v42);
if( v13 < 0 )
KeBugCheckEx(0x9Au, 0x11ui64, (unsigned int)v13, 2ui64, 0i64);
}Referenced by:
ExpWatchProductTypeInitialization