Windows NT 4.0 source code leak
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

/*++
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