232 lines
3.8 KiB
C
232 lines
3.8 KiB
C
|
// 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
|