VOID PrintVerbose()

in PPLGuard/utils.cpp [99:136]


VOID PrintVerbose(LPCWSTR pwszFormat, ...)
{
	if (g_bVerbose)
	{
		LPWSTR pwszVerboseString = NULL;
		DWORD dwVerboseStringLen = 0;
		va_list va;
		size_t st_Offset = 0;
		WCHAR wszUsername[UNLEN + 1] = { 0 };
		DWORD dwUsernameLen = UNLEN;

		GetUserName(wszUsername, &dwUsernameLen);

		va_start(va, pwszFormat);
		if (g_bDebug)
			dwVerboseStringLen += _scwprintf(L"[%ws] ", wszUsername) * sizeof(WCHAR);
		
		dwVerboseStringLen += _vscwprintf(pwszFormat, va) * sizeof(WCHAR) + 2;
		pwszVerboseString = (LPWSTR)LocalAlloc(LPTR, dwVerboseStringLen);

		if (pwszVerboseString)
		{
			if (g_bDebug)
				StringCbPrintf(pwszVerboseString, dwVerboseStringLen, L"[%ws] ", wszUsername);

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

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

			LocalFree(pwszVerboseString);
		}

		va_end(va);
	}
}