📄 w2k_obj.c
字号:
awMaxLevel, (dMaxLevel == 1 ? L"" : L"s"));
if ((pObject = w2kObjectOpen (fTypeDirectory
? __ObpTypeDirectoryObject ()
: __ObpRootDirectoryObject ()))
!= NULL)
{
n += DisplayObject (pObject, dOptions,
pwType, 0, dMaxLevel,
aLevels, TRUE);
w2kObjectClose (pObject);
}
_printf (L"\r\n%lu object%s\r\n",
n, (n == 1 ? L"" : L"s"));
return n;
}
// =================================================================
// POOR MAN'S OBJECT BROWSER
// =================================================================
VOID WINAPI _DisplayObject (PW2K_OBJECT pObject,
DWORD dLevel)
{
POBJECT_DIRECTORY pDir;
POBJECT_DIRECTORY_ENTRY pEntry;
DWORD i;
for (i = 0; i < dLevel; i++) printf (L" ");
_printf (L"%+.-16s%s\r\n", pObject->pwType, pObject->pwName);
if ((!lstrcmp (pObject->pwType, L"Directory")) &&
((pDir = w2kDirectoryOpen (pObject->pObject)) != NULL))
{
for (i = 0; i < OBJECT_HASH_TABLE_SIZE; i++)
{
for (pEntry = pDir->HashTable [i];
pEntry != NULL;
pEntry = pEntry->NextEntry)
{
_DisplayObject (pEntry->Object, dLevel+1);
}
}
w2kDirectoryClose (pDir);
}
return;
}
// -----------------------------------------------------------------
VOID WINAPI _DisplayObjects (VOID)
{
PW2K_OBJECT pObject;
if ((pObject = w2kObjectOpen (__ObpRootDirectoryObject ()))
!= NULL)
{
_DisplayObject (pObject, 0);
w2kObjectClose (pObject);
}
return;
}
// =================================================================
// OPTION MANAGEMENT
// =================================================================
BOOL WINAPI OptionNumeric (PWORD pwData,
PDWORD pdData)
{
BOOL fMinus;
DWORD i, j, n;
DWORD dData = (pdData != NULL ? *pdData : 0);
BOOL fOk = FALSE;
i = n = 0;
switch (pwData [i])
{
case '-': fMinus = TRUE; i++; break;
case '+': fMinus = FALSE; i++; break;
default: fMinus = FALSE; break;
}
while ((pwData [i] >= '0') && (pwData [i] <= '9'))
{
if ((j = (n * 10)) / 10 != n) break;
n = j;
if ((j = n + (pwData [i] - '0')) < n) break;
n = j;
i++;
}
if (i && (!pwData [i]))
{
dData = (fMinus ? 0 - n : n);
fOk = TRUE;
}
if (pdData != NULL) *pdData = dData;
return fOk;
}
// -----------------------------------------------------------------
VOID WINAPI OptionDispatcher (PPWORD ppwItems,
DWORD dCount)
{
BOOL fPlus;
DWORD dOption, i, j;
DWORD dOptions = OPTION_DEFAULT;
PWORD pwType = L"*";
DWORD dLevel = MAXDWORD;
for (i = 0; i < dCount; i++)
{
if (!lstrcmpi (ppwItems [i], L"/root"))
{
DisplayObjects (dOptions, pwType, dLevel, FALSE);
}
else if (!lstrcmpi (ppwItems [i], L"/types"))
{
DisplayObjects (dOptions, pwType, dLevel, TRUE);
}
else if (!OptionNumeric (ppwItems [i], &dLevel))
{
switch (ppwItems [i] [0])
{
default:
{
pwType = ppwItems [i];
break;
}
case '+':
case '-':
{
for (j = 0; ppwItems [i] [j]; j++)
{
dOption = 0;
switch (ppwItems [i] [j])
{
case '+':
{
fPlus = TRUE;
break;
}
case '-':
{
fPlus = FALSE;
break;
}
case 'a':
case 'A':
{
dOption = OPTION_ADDRESS;
break;
}
case 't':
case 'T':
{
dOption = OPTION_TYPE;
break;
}
case 'f':
case 'F':
{
dOption = OPTION_FLAGS;
break;
}
}
if (dOption)
{
if (fPlus) dOptions |= dOption;
else dOptions &= ~dOption;
}
}
}
}
}
}
return;
}
// =================================================================
// MAIN PROGRAM
// =================================================================
DWORD Main (DWORD argc, PTBYTE *argv, PTBYTE *argp)
{
PWORD pwStatus;
DWORD dStatus, dMemoryNow, dMemoryMax;
BOOL fMemorySign;
_printf (atAbout);
if (argc < 2)
{
_printf (atUsage, awArguments);
_printf (awMoreInfo);
}
else
{
if ((dStatus = w2kSymbolsStatus ()) == W2K_SYMBOLS_OK)
{
OptionDispatcher (argv + 1, argc - 1);
}
else
{
switch (dStatus)
{
case W2K_SYMBOLS_MODULE_ERROR:
{
pwStatus = awModuleNotFound;
break;
}
case W2K_SYMBOLS_LOAD_ERROR:
{
pwStatus = awLoadError;
break;
}
case W2K_SYMBOLS_VERSION_ERROR:
{
pwStatus = awChecksumError;
break;
}
default:
{
pwStatus = awUnknownError;
break;
}
}
_printf (L"%s", pwStatus);
}
}
if (gfMemoryStatus)
{
fMemorySign = w2kMemoryStatus (&dMemoryNow, &dMemoryMax);
_printf (L"\r\nCurrent memory usage: %c%lu"
L"\r\nMaximum memory usage: %lu\r\n",
(fMemorySign ? '-' : ' '), dMemoryNow, dMemoryMax);
}
return 0;
}
// =================================================================
// END OF PROGRAM
// =================================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -