Search code examples
delphiwinapipascalbsod

Instead throwing BSOD nothing happend after clicking button


I tried to write program which throws BSOD after clicking a button in Delphi:

procedure RtlAdjustPrivilege(var Privilege: Integer; var bEnablePrivilege: Boolean; var IsThreadPrivilege: Boolean; var PreviousValue: PBoolean) stdcall; external 'ntdll.dll' name 'RtlAdjustPrivilege';
procedure NtRaiseHardError(var ErrorStatus: UInt64;var NumberOfParameters: UInt64; var UnicodeStringParameterMask: UInt64; var IntPtr: UInt64; var ValidResponseOption: UInt64; var Response: PLongInt) stdcall; external 'ntdll.dll' name 'NtRaiseHardError';

var bl, a, b: Boolean;
var I: Integer;
var Res: LongInt;
var Pb: PBoolean;
var c, d, e, f, g: UInt64;
var PRes: PLongInt;
procedure TForm4.Button1Click(Sender: TObject);
begin
     I := 19;
     a := True;
     b := False;
     Pb := @bl;
     RtlAdjustPrivilege(I, a, b, pb);
     c := 3221225595;
     d := 0;
     e := 0;
     f := 0;
     g := 6;
     PRes := @Res;
     NtRaiseHardError(c,d,e,f,g, PRes);
end;

But after clicking button nothing happens, I wonder where I made the mistake, here is the code, I rewrite this answear in Delphi

EDIT:

Now code looks like this, but still nothing

procedure RtlAdjustPrivilege(var Privilege: Integer; var bEnablePrivilege: Boolean; var IsThreadPrivilege: Boolean; var PreviousValue: PBoolean) stdcall; external 'ntdll.dll' name 'RtlAdjustPrivilege';
procedure NtRaiseHardError(var ErrorStatus: UInt64;var NumberOfParameters: UInt64; var UnicodeStringParameterMask: Pointer; var IntPtr: Pointer; var ValidResponseOption: UInt64; var Response: PLongInt) stdcall; external 'ntdll.dll' name 'NtRaiseHardError';

var bl, a, b: Boolean;
var I: Integer;
var Res: LongInt;
var Pb: PBoolean;
var c, d, g: UInt64;
var e, f: Pointer;
var PRes: PLongInt;
procedure TForm4.Button1Click(Sender: TObject);
begin
     I := 19;
     a := True;
     b := False;
     Pb := @bl;
     RtlAdjustPrivilege(I, a, b, pb);
     c := $C000007B;
     d := 0;
     e := nil;
     f := nil;
     g := 6;
     PRes := @Res;
     NtRaiseHardError(c,d,e,f,g, PRes);
end;

Solution

  • Okay should be like this

    function RtlAdjustPrivilege(Privilege: Integer; bEnablePrivilege: Boolean; IsThreadPrivilege: Boolean; PreviousValue: PBoolean): Integer stdcall; external 'ntdll.dll' name 'RtlAdjustPrivilege';
    function NtRaiseHardError(ErrorStatus: UInt64; NumberOfParameters: Integer; UnicodeStringParameterMask: Pointer; IntPtr: Pointer; ValidResponseOption: Integer; Response: PLongInt): Integer stdcall; external 'ntdll.dll' name 'NtRaiseHardError';
    
    var bl: Boolean;
    var Res: LongInt;
    procedure TForm4.Button1Click(Sender: TObject);
    begin
         RtlAdjustPrivilege(19, True, False, @bl);
         NtRaiseHardError($C000007B,0,nil,nil,6,@Res);
    end;