VOID PrintDebug()

in PPLGuard/utils.cpp [138:172]


VOID PrintDebug(LPCWSTR pwszFormat, ...)
{
	if (g_bDebug)
	{
		LPWSTR pwszDebugString = NULL;
		DWORD dwDebugStringLen = 0;
		va_list va;
		size_t st_Offset = 0;
		WCHAR wszUsername[UNLEN + 1] = { 0 };
		DWORD dwUsernameLen = UNLEN;

		GetUserName(wszUsername, &dwUsernameLen);

		va_start(va, pwszFormat);
		dwDebugStringLen += _scwprintf(L"[DEBUG][%ws] ", wszUsername) * sizeof(WCHAR);
		dwDebugStringLen += _vscwprintf(pwszFormat, va) * sizeof(WCHAR) + 2;
		pwszDebugString = (LPWSTR)LocalAlloc(LPTR, dwDebugStringLen);

		if (pwszDebugString)
		{
			StringCbPrintf(pwszDebugString, dwDebugStringLen, L"[DEBUG][%ws] ", wszUsername);

			if (SUCCEEDED(StringCbLength(pwszDebugString, dwDebugStringLen, &st_Offset)))
			{
				StringCbVPrintf(&pwszDebugString[st_Offset / sizeof(WCHAR)], dwDebugStringLen - st_Offset, pwszFormat, va);

				wprintf(L"%ws", pwszDebugString);
			}

			LocalFree(pwszDebugString);
		}

		va_end(va);
	}
}