windows-nt/Source/XPSP1/NT/shell/tools/drvfull/dfhlprs.cpp
2020-09-26 16:20:57 +08:00

183 lines
3.7 KiB
C++

#include "dfhlprs.h"
#include <stdio.h>
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;
}