Something very strange happens when I target Windows 8.1 when compiling my driver.
Once it loads, it is reset using the bugcheck KERNEL_SECURITY_CHECK_FAILURE , the first parameter of 6, which means " The stack cookie security cookie was not properly initialized by the loader ".
This may be caused by creating a driver to run only on Windows 8 and trying to load the driver image onto an earlier version of Windows. To avoid this problem, you must create a driver to run on an earlier version of Windows. " This error does not occur if I am targeting Windows 7.
I was able to pinpoint where this error is. This happens in the __security_init_cookie function, which is called by GsDriverEntry .
INIT:000000014000C1B4 __security_init_cookie proc near ; CODE XREF: GsDriverEntry+10p INIT:000000014000C1B4 mov rax, cs:__security_cookie INIT:000000014000C1BB test rax, rax INIT:000000014000C1BE jz short loc_14000C1DA INIT:000000014000C1C0 mov rcx, 2B992DDFA232h INIT:000000014000C1CA cmp rax, rcx INIT:000000014000C1CD jz short loc_14000C1DA INIT:000000014000C1CF not rax INIT:000000014000C1D2 mov cs:__security_cookie_complement, rax INIT:000000014000C1D9 retn INIT:000000014000C1DA ; --------------------------------------------------------------------------- INIT:000000014000C1DA INIT:000000014000C1DA loc_14000C1DA: ; CODE XREF: __security_init_cookie+Aj INIT:000000014000C1DA ; __security_init_cookie+19j INIT:000000014000C1DA mov ecx, 6 INIT:000000014000C1DF int 29h ; Win8: RtlFailFast(ecx)
It can be seen from this showdown that it performs 2 checks.
The first check checks if rax (__security_cookie) is zero and the second check compares it to 2B992DDFA232h.
However, __security_cookie declared in my binary format as 2B992DDFA232h , and therefore the interrupt should never be called, but somehow it is.
windows driver wdk
Invokestatic
source share