#include #include #include typedef DWORD* NTSTATUS; typedef struct _UNICODE_STRING { USHORT Length; USHORT MaximumLength; PWSTR Buffer; } UNICODE_STRING, *PUNICODE_STRING; #define INIT_UNICODE_STRING(var,string) UNICODE_STRING var = {sizeof (string) - sizeof (WORD),sizeof (string),string} typedef struct _OBJECT_ATTRIBUTES { ULONG Length; HANDLE RootDirectory; PUNICODE_STRING ObjectName; ULONG Attributes; PVOID SecurityDescriptor; PVOID SecurityQualityOfService; } OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES; typedef NTSTATUS (__stdcall*OpenSection)(PHANDLE SectionHandle, ACCESS_MASK DesiredAccess, POBJECT_ATTRIBUTES ObjectAttributes); OpenSection NtOpenSection; int main(int argc, char *argv[]) { EXPLICIT_ACCESS Access; HANDLE Section; NTSTATUS status; INIT_UNICODE_STRING(name, L"\\Device\\PhysicalMemory"); OBJECT_ATTRIBUTES oa ={sizeof(oa),0,&name,0,0,0}; memset(&Access, 0, sizeof(EXPLICIT_ACCESS)); status = NtOpenSection(&Section, WRITE_DAC | READ_CONTROL, &oa); if(status==0) { printf("Success"); } return 0; }