mirror of https://github.com/lianthony/NT4.0
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.
163 lines
3.5 KiB
163 lines
3.5 KiB
/*++
|
|
|
|
Copyright (c) 1991 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
DispFile.c
|
|
|
|
Abstract:
|
|
|
|
This code displays File info structures on the debug terminal.
|
|
|
|
Author:
|
|
|
|
John Rogers (JohnRo) 21-Aug-1991
|
|
|
|
Environment:
|
|
|
|
Portable to any flat, 32-bit environment. (Uses Win32 typedefs.)
|
|
Requires ANSI C extensions: slash-slash comments, long external names.
|
|
|
|
Notes:
|
|
|
|
This code assumes that the info levels are subsets of each other.
|
|
|
|
Revision History:
|
|
|
|
21-Aug-1991 JohnRo
|
|
Created.
|
|
10-Sep-1991 JohnRo
|
|
Made changes suggested by PC-LINT. (Rename DO macro.)
|
|
16-Sep-1991 JohnRo
|
|
Made changes toward UNICODE.
|
|
|
|
--*/
|
|
|
|
|
|
#if DBG
|
|
|
|
|
|
#include <windef.h> // IN, DWORD, etc.
|
|
#include <lmcons.h> // NET_API_STATUS (needed by lmshare.h)
|
|
|
|
#include <lmshare.h> // FILE_INFO_3, etc.
|
|
#include <netdebug.h> // My prototypes, FORMAT_ equates, etc.
|
|
#include <tstring.h> // STRCAT().
|
|
|
|
|
|
VOID
|
|
NetpDbgDisplayFileId(
|
|
IN DWORD Id
|
|
)
|
|
{
|
|
NetpDbgDisplayDword( "File Id", Id );
|
|
|
|
} // NetpDbgDisplayFileId
|
|
|
|
|
|
VOID
|
|
NetpDbgDisplayFilePermissions(
|
|
IN DWORD Perm
|
|
)
|
|
{
|
|
// Longest name is "CREATE" (6 chars)
|
|
TCHAR str[(6+2)*3]; // 6 chars per name, 2 spaces, for 3 names.
|
|
str[0] = '\0';
|
|
|
|
#define DO_PERM_BIT(name) \
|
|
if (Perm & PERM_FILE_ ## name) { \
|
|
(void) STRCAT(str, (LPTSTR) TEXT(# name)); \
|
|
(void) STRCAT(str, (LPTSTR) TEXT(" ")); \
|
|
Perm &= ~(PERM_FILE_ ## name); \
|
|
}
|
|
|
|
NetpAssert(Perm != 0);
|
|
DO_PERM_BIT(READ);
|
|
DO_PERM_BIT(WRITE);
|
|
DO_PERM_BIT(CREATE);
|
|
|
|
NetpDbgDisplayString("File permissions", str);
|
|
if (Perm != 0) {
|
|
NetpDbgDisplayDwordHex( "UNEXPECTED PERMISSIONS BIT(S)", Perm );
|
|
}
|
|
|
|
} // NetpDbgDisplayFilePermissions
|
|
|
|
|
|
VOID
|
|
NetpDbgDisplayFile(
|
|
IN DWORD Level,
|
|
IN LPVOID Info
|
|
)
|
|
{
|
|
// largest possible info level (assumes subsets):
|
|
LPFILE_INFO_3 p = Info;
|
|
|
|
NetpKdPrint(( "File info (level " FORMAT_DWORD ") at "
|
|
FORMAT_LPVOID ":\n", Level, (LPVOID) Info));
|
|
|
|
switch (Level) {
|
|
|
|
// BUGBUG: Add support for levels 0 and 1?
|
|
|
|
case 2 :
|
|
case 3 :
|
|
NetpDbgDisplayFileId( p->fi3_id );
|
|
if (Level == 2) {
|
|
break;
|
|
}
|
|
NetpDbgDisplayFilePermissions( p->fi3_permissions );
|
|
NetpDbgDisplayDword( "Number of locks", p->fi3_num_locks );
|
|
NetpDbgDisplayString( "Path name", p->fi3_pathname );
|
|
NetpDbgDisplayString( "User name (or computer name)",
|
|
p->fi3_username );
|
|
break;
|
|
|
|
default :
|
|
NetpKdPrint(( "NetpDbgDisplayFile: **INVALID INFO LEVEL**\n"));
|
|
NetpAssert(FALSE);
|
|
break;
|
|
}
|
|
|
|
} // NetpDbgDisplayFile
|
|
|
|
|
|
VOID
|
|
NetpDbgDisplayFileArray(
|
|
IN DWORD Level,
|
|
IN LPVOID Array,
|
|
IN DWORD EntryCount
|
|
)
|
|
{
|
|
DWORD EntriesLeft;
|
|
DWORD EntrySize;
|
|
LPVOID ThisEntry = Array;
|
|
|
|
switch (Level) {
|
|
|
|
// BUGBUG: add support for old info levels (0 and 1) here?
|
|
|
|
case 2 :
|
|
EntrySize = sizeof(FILE_INFO_2);
|
|
break;
|
|
case 3 :
|
|
EntrySize = sizeof(FILE_INFO_3);
|
|
break;
|
|
default :
|
|
NetpKdPrint(( "NetpDbgDisplayFileArray: "
|
|
"**INVALID INFO LEVEL**\n"));
|
|
NetpAssert(FALSE);
|
|
}
|
|
|
|
for (EntriesLeft = EntryCount; EntriesLeft>0; --EntriesLeft) {
|
|
NetpDbgDisplayFile(
|
|
Level,
|
|
ThisEntry);
|
|
ThisEntry = (LPVOID) (((LPBYTE) ThisEntry) + EntrySize);
|
|
}
|
|
|
|
} // NetpDbgDisplayFileArray
|
|
|
|
|
|
#endif // DBG
|