/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Microsoft Windows, Copyright (C) Microsoft Corporation, 2000 File: Debug.cpp Content: Implementation of debugging facilities. History: 11-15-99 dsie created ------------------------------------------------------------------------------*/ #include "StdAfx.h" #include "CAPICOM.h" #include "Debug.h" #ifdef _DEBUG #define CAPICOM_DUMP_DIR_ENV_VAR "CAPICOM_DUMP_DIR" /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Function : DumpToFile Synopsis : Dump data to file for debug analysis. Parameter: char * szFileName - File name (just the file name without any directory path). BYTE * pbData - Pointer to data. DWORD cbData - Size of data. Remark : No action is taken if the environment variable, CAPICOM_DUMP_DIR, is not defined. If defined, the value should be the directory where the file would be created (i.e. C:\Test). ------------------------------------------------------------------------------*/ void DumpToFile (char * szFileName, BYTE * pbData, DWORD cbData) { DWORD dwSize = 0; char * szPath = NULL; HANDLE hFile = NULL; // // No dump, if CAPICOM_DUMP_DIR environment is not found. // if (0 == (dwSize = ::GetEnvironmentVariableA(CAPICOM_DUMP_DIR_ENV_VAR, NULL, 0))) { goto CommonExit; } // // Allocate memory for the entire path (dir + filename). // if (!(szPath = (char *) ::CoTaskMemAlloc(dwSize + ::strlen(szFileName) + 1))) { goto CommonExit; } // // Get the dir. // if (dwSize != ::GetEnvironmentVariableA(CAPICOM_DUMP_DIR_ENV_VAR, szPath, dwSize) + 1) { goto CommonExit; } // // Append \ if not the last char. // if (szPath[dwSize - 1] != '\\') { ::strcat(szPath, "\\"); } // // Form full path. // ::strcat(szPath, szFileName); // // Open the file. // if (hFile = ::CreateFileA(szPath, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL)) { DWORD cbWritten = 0; ::WriteFile(hFile, // handle to file pbData, // data buffer cbData, // number of bytes to write &cbWritten, // number of bytes written NULL); // overlapped buffer ATLASSERT(cbData == cbWritten); } CommonExit: // // Free resource. // if (hFile) { ::CloseHandle(hFile); } if (szPath) { ::CoTaskMemFree(szPath); } return; } #endif // _DEBUG