#include <windows.h>
#include <tchar.h>
#include <stdio.h>
int main()
{
DWORD
chValue =
ExpandEnvironmentStrings(TEXT("PATH='%PATH%'"),
NULL, 0);
PTSTR
pszBuffer = new
TCHAR[chValue];
chValue
=
ExpandEnvironmentStrings(TEXT("PATH='%PATH%'"),
pszBuffer, chValue);
_tprintf(TEXT("%s\r\n"),
pszBuffer);
delete
[] pszBuffer;
}
void DumpEnvStrings()
{
PTSTR
pEnvBlock = GetEnvironmentStrings();
TCHAR
szName[MAX_PATH];
TCHAR
szValue[MAX_PATH];
PTSTR
pszCurrent = pEnvBlock;
HRESULT
hr = S_OK;
PCTSTR
pszPos = NULL;
int
current = 0;
while
(pszCurrent != NULL)
{
if
(*pszCurrent != TEXT('='))
{
pszPos
= _tcschr(pszCurrent,
TEXT('='));
pszPos++;
size_t
cbNameLength =
(size_t)pszPos -
(size_t)pszCurrent
- sizeof(TCHAR);
hr
= StringCbCopyN(szName,
MAX_PATH, pszCurrent,
cbNameLength);
if
(FAILED(hr))
break;
hr
= StringCchCopyN(szValue,
MAX_PATH,
pszPos, _tcslen(pszPos) + 1);
if
(SUCCEEDED(hr))
_tprintf(TEXT("[%u] %s=%s\r\n"), current,
szName, szValue);
else
{
if (hr == STRSAFE_E_INSUFFICIENT_BUFFER)
{
_tprintf(TEXT("[%u] %s=%s\r\n"), current,
szName, szValue);
}
else
{
_tprintf(TEXT("[%u] %s=???\r\n"), current, szName);
break;
}
}
}
else
{
_tprintf(TEXT("[%u]
%s\r\n"), current, pszCurrent);
}
current++;
while
(*pszCurrent != TEXT('\0'))
pszCurrent++;
pszCurrent++;
if
(*pszCurrent == TEXT('\0'))
break;
}
FreeEnvironmentStrings(pEnvBlock);
}
extern "C" const IMAGE_DOS_HEADER
__ImageBase;
void DumpModule()
{
HMODULE
hModule = GetModuleHandle(NULL);
_tprintf(TEXT("with
GetModuleHandle(NULL) = 0x%x\r\n"), hModule);
_tprintf(TEXT("with
__ImageBase = 0x%x\r\n"), (HINSTANCE)&__ImageBase);
hModule
= NULL;
GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS,
(PCTSTR)DumpModule,
&hModule);
_tprintf(TEXT("with
GetModuleHandleEx = 0x%x\r\n"), hModule);
}