#include "dfhlprs.h" #include static DWORD dwStartTick = 0; static DWORD dwStopTick = 0; int _PrintIndent(DWORD cch) { // for now, stupid simple for (DWORD dw = 0; dw < cch; ++dw) { wprintf(TEXT(" ")); } return cch; } int _PrintCR() { return wprintf(TEXT("\n")); } int _PrintGUID(CONST GUID* pguid) { return wprintf(L"{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}", pguid->Data1, pguid->Data2, pguid->Data3, pguid->Data4[0], pguid->Data4[1], pguid->Data4[2], pguid->Data4[3], pguid->Data4[4], pguid->Data4[5], pguid->Data4[6], pguid->Data4[7]); } int _PrintGUIDEx(CONST GUID* pguid, _sGUID_DESCR rgguid[], DWORD cguid, BOOL fPrintValue, DWORD cchIndent) { BOOL fFoundIt = FALSE; int i = _PrintIndent(cchIndent); for (DWORD dw = 0; dw < cguid; ++dw) { if (*(rgguid[dw].pguid) == *pguid) { i += wprintf(TEXT("%s"), rgguid[dw].pszDescr); fFoundIt = TRUE; break; } } if (fPrintValue) { if (fFoundIt) { i += wprintf(TEXT(", ")); } i += _PrintGUID(pguid); } return i; } int _PrintGetLastError(DWORD cchIndent) { int i = _PrintIndent(cchIndent); i += wprintf(TEXT("GetLastError: 0x%08X"), GetLastError()); return i; } void _StartClock() { dwStartTick = GetTickCount(); } void _StopClock() { dwStopTick = GetTickCount(); } int _PrintElapsedTime(DWORD cchIndent, BOOL fCarriageReturn) { int i = _PrintIndent(cchIndent); // consider wrap DWORD dwDiff = dwStopTick - dwStartTick; DWORD dwSec = dwDiff / 1000; DWORD dwMill = dwDiff % 1000; i += wprintf(TEXT("Elapsed time: %01d.%03d"), dwSec, dwMill); if (fCarriageReturn) { wprintf(TEXT("\n")); } return i; } int _PrintFlag(DWORD dwFlag, _sFLAG_DESCR rgflag[], DWORD cflag, DWORD cchIndent, BOOL fPrintValue, BOOL fHex, BOOL fComment, BOOL fORed) { int i = 0; BOOL fAtLeastOne = FALSE; for (DWORD dw = 0; dw < cflag; ++dw) { BOOL fPrint = FALSE; if (fORed) { if (rgflag[dw].dwFlag & dwFlag) { fPrint = TRUE; } } else { if (rgflag[dw].dwFlag == dwFlag) { fPrint = TRUE; } } if (fPrint) { if (fAtLeastOne) { i += wprintf(TEXT("\n")); } i += _PrintIndent(cchIndent); if (fPrintValue) { if (fHex) { i += wprintf(TEXT("0x%08X, "), rgflag[dw].dwFlag); } else { i += wprintf(TEXT("%u, "), rgflag[dw].dwFlag); } } i += wprintf(TEXT("%s"), rgflag[dw].pszDescr); if (fComment) { i += wprintf(TEXT(", '%s'"), rgflag[dw].pszComment); } fAtLeastOne = TRUE; } } return i; } HANDLE _GetDeviceHandle(LPTSTR psz, DWORD dwDesiredAccess, DWORD dwFileAttributes) { HANDLE hDevice = CreateFile(psz, // drive to open dwDesiredAccess, // don't need any access to the drive FILE_SHARE_READ | FILE_SHARE_WRITE, // share mode NULL, // default security attributes OPEN_EXISTING, // disposition dwFileAttributes, // file attributes NULL); // don't copy any file's attributes return hDevice; }