mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
313 lines
9.1 KiB
313 lines
9.1 KiB
#include <stdlib.h>
|
|
#include <stdarg.h>
|
|
#include <stdio.h>
|
|
#include <time.h>
|
|
#include "Global.h"
|
|
#include "Win32API.h"
|
|
#include "AppMan.h"
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Global Variables
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
WCHAR gwszGlobalString[MAX_STRING_LEN];
|
|
CHAR gszGlobalString[MAX_STRING_LEN];
|
|
GUID gsCryptoGuid = { 0xb47c09c9, 0x1ace, 0x4bc3, 0xab, 0x45, 0x29, 0xa1, 0x80, 0x37, 0xa6, 0xf9 };
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
extern LPSTR MakeString(LPCSTR szFormat, ...)
|
|
{
|
|
va_list ArgumentList;
|
|
|
|
if (NULL != szFormat)
|
|
{
|
|
va_start(ArgumentList, szFormat);
|
|
_vsnprintf(gszGlobalString, 512, szFormat, ArgumentList);
|
|
va_end(ArgumentList);
|
|
}
|
|
|
|
return gszGlobalString;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
extern DWORD GetAppManVersion(void)
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
extern BOOL StringToGuidW(LPCWSTR wszGuidString, GUID * lpGuid)
|
|
{
|
|
BOOL fSuccess = FALSE;
|
|
|
|
if (11 == swscanf(wszGuidString, L"{%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}", &lpGuid->Data1, &lpGuid->Data2, &lpGuid->Data3, &lpGuid->Data4[0], &lpGuid->Data4[1], &lpGuid->Data4[2], &lpGuid->Data4[3], &lpGuid->Data4[4], &lpGuid->Data4[5], &lpGuid->Data4[6], &lpGuid->Data4[7]))
|
|
{
|
|
fSuccess = TRUE;
|
|
}
|
|
|
|
return fSuccess;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
extern BOOL GuidToStringW(const GUID * lpGuid, LPWSTR wszGuidString)
|
|
{
|
|
BOOL fSuccess = FALSE;
|
|
|
|
if (38 == swprintf(wszGuidString, L"{%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}", lpGuid->Data1, lpGuid->Data2, lpGuid->Data3, lpGuid->Data4[0], lpGuid->Data4[1], lpGuid->Data4[2], lpGuid->Data4[3], lpGuid->Data4[4], lpGuid->Data4[5], lpGuid->Data4[6], lpGuid->Data4[7]))
|
|
{
|
|
fSuccess = TRUE;
|
|
}
|
|
|
|
return fSuccess;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
extern BOOL StringToGuidA(LPCSTR szGuidString, GUID * lpGuid)
|
|
{
|
|
BOOL fSuccess = FALSE;
|
|
DWORD dwDword[11];
|
|
|
|
if (11 == sscanf(szGuidString, "{%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}", &dwDword[0], &dwDword[1], &dwDword[2], &dwDword[3], &dwDword[4], &dwDword[5], &dwDword[6], &dwDword[7], &dwDword[8], &dwDword[9], &dwDword[10]))
|
|
{
|
|
lpGuid->Data1 = dwDword[0];
|
|
lpGuid->Data2 = (WORD) dwDword[1];
|
|
lpGuid->Data3 = (WORD) dwDword[2];
|
|
lpGuid->Data4[0] = (BYTE) dwDword[3];
|
|
lpGuid->Data4[1] = (BYTE) dwDword[4];
|
|
lpGuid->Data4[2] = (BYTE) dwDword[5];
|
|
lpGuid->Data4[3] = (BYTE) dwDword[6];
|
|
lpGuid->Data4[4] = (BYTE) dwDword[7];
|
|
lpGuid->Data4[5] = (BYTE) dwDword[8];
|
|
lpGuid->Data4[6] = (BYTE) dwDword[9];
|
|
lpGuid->Data4[7] = (BYTE) dwDword[10];
|
|
|
|
fSuccess = TRUE;
|
|
}
|
|
|
|
return fSuccess;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
extern BOOL GuidToStringA(const GUID * lpGuid, LPSTR szGuidString)
|
|
{
|
|
BOOL fSuccess = FALSE;
|
|
|
|
if (38 == wsprintfA(szGuidString, "{%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}", lpGuid->Data1, lpGuid->Data2, lpGuid->Data3, lpGuid->Data4[0], lpGuid->Data4[1], lpGuid->Data4[2], lpGuid->Data4[3], lpGuid->Data4[4], lpGuid->Data4[5], lpGuid->Data4[6], lpGuid->Data4[7]))
|
|
{
|
|
fSuccess = TRUE;
|
|
}
|
|
|
|
return fSuccess;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
extern void EncryptGuid(GUID * lpGuid)
|
|
{
|
|
DWORD dwIndex;
|
|
BYTE * lpCryptoByte;
|
|
BYTE * lpGuidByte;
|
|
|
|
lpCryptoByte = (BYTE *) &gsCryptoGuid;
|
|
lpGuidByte = (BYTE *) lpGuid;
|
|
|
|
for (dwIndex = 0; dwIndex < sizeof(GUID); dwIndex++)
|
|
{
|
|
*(lpGuidByte + dwIndex) = (BYTE)(*(lpGuidByte + dwIndex) ^ *(lpCryptoByte + dwIndex));
|
|
}
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
extern void DecryptGuid(GUID * lpGuid)
|
|
{
|
|
DWORD dwIndex;
|
|
BYTE * lpCryptoByte;
|
|
BYTE * lpGuidByte;
|
|
|
|
lpCryptoByte = (BYTE *) &gsCryptoGuid;
|
|
lpGuidByte = (BYTE *) lpGuid;
|
|
|
|
for (dwIndex = 0; dwIndex < sizeof(GUID); dwIndex++)
|
|
{
|
|
*(lpGuidByte + dwIndex) = (BYTE)(*(lpGuidByte + dwIndex) ^ *(lpCryptoByte + dwIndex));
|
|
}
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
extern void RandomInit(void)
|
|
{
|
|
srand((unsigned) time(NULL));
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
extern BYTE RandomBYTE(void)
|
|
{
|
|
DWORD dwRandom;
|
|
|
|
dwRandom = (rand() * 0xff) / RAND_MAX;
|
|
|
|
return (BYTE) dwRandom;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
extern WORD RandomWORD(void)
|
|
{
|
|
WORD wRandom;
|
|
|
|
wRandom = (WORD)(rand() * 2);
|
|
|
|
return wRandom;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
extern DWORD RandomDWORD(void)
|
|
{
|
|
DWORD dwRandom;
|
|
|
|
dwRandom = rand() * (0xffffffff/RAND_MAX);
|
|
|
|
return dwRandom;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
extern DWORD StrLenA(LPCSTR szString)
|
|
{
|
|
DWORD dwIndex;
|
|
|
|
dwIndex = 0;
|
|
while ((MAX_PATH_CHARCOUNT > dwIndex)&&(0 != szString[dwIndex]))
|
|
{
|
|
dwIndex++;
|
|
}
|
|
|
|
return dwIndex + 1;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
extern DWORD StrLenW(LPCWSTR wszString)
|
|
{
|
|
DWORD dwIndex;
|
|
|
|
dwIndex = 0;
|
|
while ((MAX_PATH_CHARCOUNT > dwIndex)&&(0 != wszString[dwIndex]))
|
|
{
|
|
dwIndex++;
|
|
}
|
|
|
|
return dwIndex + 1;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
extern BOOL GetResourceStringA(DWORD dwResourceId, LPSTR szString, DWORD dwStringCharLen)
|
|
{
|
|
HINSTANCE hDllInstance;
|
|
BOOL fSuccess = FALSE;
|
|
|
|
hDllInstance = (HINSTANCE) GetModuleHandle("AppMan.dll");
|
|
if (0 < LoadStringA(hDllInstance, dwResourceId, szString, dwStringCharLen))
|
|
{
|
|
fSuccess = TRUE;
|
|
}
|
|
|
|
return fSuccess;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
extern BOOL GetResourceStringW(DWORD dwResourceId, LPWSTR wszString, DWORD dwStringCharLen)
|
|
{
|
|
HINSTANCE hDllInstance;
|
|
BOOL fSuccess = FALSE;
|
|
CWin32API sWin32API;
|
|
|
|
hDllInstance = (HINSTANCE) GetModuleHandle("AppMan.dll");
|
|
if (0 < LoadStringA(hDllInstance, dwResourceId, gszGlobalString, MAX_PATH_CHARCOUNT))
|
|
{
|
|
if (0 < sWin32API.MultiByteToWideChar(gszGlobalString, MAX_PATH_CHARCOUNT, wszString, dwStringCharLen))
|
|
{
|
|
fSuccess = TRUE;
|
|
}
|
|
}
|
|
|
|
return fSuccess;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
extern LPSTR GetResourceStringPtrA(DWORD dwResourceId)
|
|
{
|
|
LPSTR lpszStringPtr = NULL;
|
|
|
|
if (TRUE == GetResourceStringA(dwResourceId, gszGlobalString, MAX_PATH_CHARCOUNT))
|
|
{
|
|
lpszStringPtr = gszGlobalString;
|
|
}
|
|
|
|
return lpszStringPtr;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
extern LPWSTR GetResourceStringPtrW(DWORD dwResourceId)
|
|
{
|
|
LPWSTR lpwszStringPtr = NULL;
|
|
|
|
if (TRUE == GetResourceStringW(dwResourceId, gwszGlobalString, MAX_PATH_CHARCOUNT))
|
|
{
|
|
lpwszStringPtr = gwszGlobalString;
|
|
}
|
|
|
|
return lpwszStringPtr;
|
|
}
|