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