mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
182 lines
3.7 KiB
182 lines
3.7 KiB
#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;
|
|
}
|