98 lines
2.3 KiB
C
98 lines
2.3 KiB
C
|
// rootattr.c
|
|||
|
|
|||
|
#include <stdio.h>
|
|||
|
#include <string.h>
|
|||
|
#include <nt.h>
|
|||
|
#include <ntrtl.h>
|
|||
|
#include <nturtl.h>
|
|||
|
#include <windows.h>
|
|||
|
|
|||
|
#include <ntioapi.h>
|
|||
|
|
|||
|
|
|||
|
VOID
|
|||
|
_cdecl
|
|||
|
main (
|
|||
|
int argc,
|
|||
|
char *argv[]
|
|||
|
)
|
|||
|
{
|
|||
|
IO_STATUS_BLOCK ioStatusBlock;
|
|||
|
FILE_BASIC_INFORMATION basicInfo;
|
|||
|
HANDLE hFile;
|
|||
|
NTSTATUS status;
|
|||
|
char buffer[260];
|
|||
|
|
|||
|
//
|
|||
|
// Get parameters
|
|||
|
//
|
|||
|
|
|||
|
if (argc < 2) {
|
|||
|
|
|||
|
printf("This program returns or sets the attributes for the root directory.\n\n");
|
|||
|
printf("usage: %s driveletter [new value]\n", argv[0]);
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
strcpy( buffer, argv[1] );
|
|||
|
strcat( buffer, "\\" );
|
|||
|
|
|||
|
hFile = CreateFile( buffer,
|
|||
|
MAXIMUM_ALLOWED,
|
|||
|
FILE_SHARE_READ,
|
|||
|
NULL,
|
|||
|
OPEN_EXISTING,
|
|||
|
FILE_FLAG_BACKUP_SEMANTICS | SECURITY_IMPERSONATION,
|
|||
|
NULL );
|
|||
|
|
|||
|
if ( hFile == INVALID_HANDLE_VALUE ) {
|
|||
|
|
|||
|
printf( "Error opening directory %s, error %d (decimal)\n", buffer, GetLastError() );
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
status = NtQueryInformationFile( hFile,
|
|||
|
&ioStatusBlock,
|
|||
|
&basicInfo,
|
|||
|
sizeof( basicInfo ),
|
|||
|
FileBasicInformation );
|
|||
|
|
|||
|
if (!NT_SUCCESS( status )) {
|
|||
|
|
|||
|
printf( "Couldn't get attributes, error status %x\n", status );
|
|||
|
CloseHandle( hFile );
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
printf( "Attributes for %s are currently: %0x\n", buffer, basicInfo.FileAttributes );
|
|||
|
|
|||
|
if (argc >= 3) {
|
|||
|
|
|||
|
//
|
|||
|
// Third argument present, must be setting attributes.
|
|||
|
//
|
|||
|
|
|||
|
sscanf( argv[2], "%02x", &basicInfo.FileAttributes );
|
|||
|
|
|||
|
printf( "Setting attributes for %s to: %0x\n", buffer, basicInfo.FileAttributes );
|
|||
|
|
|||
|
status = NtSetInformationFile( hFile,
|
|||
|
&ioStatusBlock,
|
|||
|
&basicInfo,
|
|||
|
sizeof( basicInfo ),
|
|||
|
FileBasicInformation );
|
|||
|
if (NT_SUCCESS( status )) {
|
|||
|
|
|||
|
printf( "Set attributes succesfully\n" );
|
|||
|
|
|||
|
} else {
|
|||
|
|
|||
|
printf( "Couldn't set attributes, error status %x\n", status );
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
CloseHandle( hFile );
|
|||
|
return;
|
|||
|
}
|
|||
|
|