windows-nt/Source/XPSP1/NT/base/fs/ntfs/tests/objectid/oidtst.c

232 lines
3.8 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
// oidtst.c
#include "oidtst.h"
int
FsTestDecipherStatus(
IN NTSTATUS Status
)
{
int Error;
printf( "Status %x -- ", Status );
switch(Status) {
case STATUS_ACCESS_DENIED:
printf( "STATUS_ACCESS_DENIED\n" );
break;
case STATUS_NOT_IMPLEMENTED:
printf( "STATUS_NOT_IMPLEMENTED\n" );
break;
case STATUS_NOT_LOCKED:
printf( "STATUS_NOT_LOCKED\n" );
break;
case STATUS_OBJECTID_EXISTS:
printf( "STATUS_OBJECTID_EXISTS\n" );
break;
case STATUS_BUFFER_OVERFLOW:
printf( "STATUS_BUFFER_OVERFLOW\n" );
break;
case STATUS_NO_MORE_FILES:
printf( "STATUS_NO_MORE_FILES\n" );
break;
case STATUS_DUPLICATE_NAME:
printf( "STATUS_DUPLICATE_NAME\n" );
break;
case STATUS_OBJECT_NAME_COLLISION:
printf( "STATUS_OBJECT_NAME_COLLISION\n" );
break;
case STATUS_OBJECT_NAME_NOT_FOUND:
printf( "STATUS_OBJECT_NAME_NOT_FOUND\n" );
break;
case STATUS_INVALID_ADDRESS:
printf( "STATUS_INVALID_ADDRESS\n" );
break;
case STATUS_INVALID_PARAMETER:
printf( "STATUS_INVALID_PARAMETER\n" );
break;
case STATUS_OBJECT_PATH_NOT_FOUND:
printf( "STATUS_OBJECT_PATH_NOT_FOUND\n" );
break;
case STATUS_OBJECT_PATH_SYNTAX_BAD:
printf( "STATUS_OBJECT_PATH_SYNTAX_BAD\n" );
break;
case STATUS_SUCCESS:
printf( "STATUS_SUCCESS\n" );
break;
default:
printf( "(unknown status code)\n" );
break;
}
if (Status != STATUS_SUCCESS) {
Error = GetLastError();
printf( "GetLastError returned (dec): %d\n", Error );
return 1;
}
return 0;
}
void
FsTestHexDump (
IN UCHAR *Buffer,
IN ULONG Size
)
{
ULONG idx;
printf( "\n" );
for (idx = 0; idx < Size; idx += 1) {
// printf( "%02x %c ", Buffer[idx], Buffer[idx] );
printf( "%02x ", Buffer[idx] );
}
}
void
FsTestHexDumpLongs (
IN ULONG *Buffer,
IN ULONG SizeInBytes
)
{
ULONG idx;
ULONG Size = SizeInBytes / 4;
printf( "\n" );
for (idx = 0; idx < Size; idx += 1) {
printf( "%08x ", Buffer[idx] );
}
}
#if 0
void
FsTestDumpMenu(
void
)
{
printf( "\n s -- Set object id" );
printf( "\n g -- Get object id" );
printf( "\n d -- Delete object id" );
printf( "\n o -- Open file by object id" );
printf( "\n q -- Quit" );
}
int
FsTestDoCommand(
IN HANDLE hFile,
IN OUT OBJECTID *ObjectId
)
{
char cmd[8];
int retval = 0;
HANDLE OpenedFile;
printf( "\n -->" );
scanf( "%s", cmd);
switch(cmd[0]) {
case 's':
FsTestSetOid( hFile, *ObjectId );
break;
case 'g':
FsTestGetOid( hFile, ObjectId );
break;
case 'd':
FsTestDeleteOid( hFile, *ObjectId );
break;
case 'o':
FsTestOpenByOid( *ObjectId, &OpenedFile );
break;
case 'q':
retval = 1;
break;
default:
printf( "\n Try again" );
}
return retval;
}
VOID
main(
int argc,
char *argv[]
)
{
HANDLE hFile;
OBJECTID ObjectId;
//
// Get parameters
//
if (argc < 3) {
printf("This program tests object ids (ntfs only).\n\n");
printf("usage: %s filename ObjectId\n", argv[0]);
return;
}
hFile = CreateFile( argv[1],
0,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
0,
NULL );
if ( hFile == INVALID_HANDLE_VALUE ) {
printf( "Error opening file %s %x\n", argv[1], GetLastError() );
return;
}
RtlZeroBytes( &ObjectId,
sizeof( ObjectId ) );
sscanf( argv[2], "%d", &ObjectId.Lineage.Data1 );
printf( "\nUsing file:%s, ObjectId:%d", argv[1], ObjectId.Lineage.Data1 );
while (retval == 0) {
FsTestDumpMenu();
retval = FsTestDoCommand( hFile, &ObjectId );
}
CloseHandle( hFile );
return;
}
#endif