mirror of
https://github.com/mirkobrombin/raven.git
synced 2026-10-28 21:25:06 +00:00
29 lines
1.3 KiB
C
29 lines
1.3 KiB
C
#define WIN32_LEAN_AND_MEAN
|
|
#include <windows.h>
|
|
|
|
int raven_entry(void)
|
|
{
|
|
const BYTE bytes[]={'A',0,'B','\n'};
|
|
DWORD count=0xaaaa;
|
|
SetLastError(0x5678);
|
|
HANDLE output=GetStdHandle(STD_OUTPUT_HANDLE);
|
|
if (!output || output==INVALID_HANDLE_VALUE || GetStdHandle(STD_OUTPUT_HANDLE)!=output || GetLastError()!=0x5678) return 1;
|
|
if (GetFileType(output)!=FILE_TYPE_DISK) return 2;
|
|
STARTUPINFOA startup;
|
|
GetStartupInfoA(&startup);
|
|
if ((startup.dwFlags & STARTF_USESTDHANDLES) && startup.hStdOutput!=output) return 3;
|
|
if (!WriteFile(output,bytes,sizeof(bytes),&count,0) || count!=sizeof(bytes)) return 4;
|
|
if (!WriteFile(output,bytes,0,&count,0) || count) return 5;
|
|
const DWORD invalid[]={0,1,(DWORD)-13,(DWORD)-9};
|
|
for (unsigned i=0;i<sizeof(invalid)/sizeof(invalid[0]);++i) {
|
|
SetLastError(0);
|
|
if (GetStdHandle(invalid[i])!=INVALID_HANDLE_VALUE || GetLastError()!=ERROR_INVALID_HANDLE) return 6;
|
|
}
|
|
HANDLE event=CreateEventW(0,TRUE,FALSE,0);
|
|
if (!event || GetFileType(event)!=FILE_TYPE_UNKNOWN || GetLastError()!=ERROR_INVALID_HANDLE || !CloseHandle(event)) return 7;
|
|
if (!CloseHandle(output) || GetStdHandle(STD_OUTPUT_HANDLE)!=output) return 8;
|
|
count=0xaaaa;
|
|
if (WriteFile(output,bytes,sizeof(bytes),&count,0) || GetLastError()!=ERROR_INVALID_HANDLE || count) return 9;
|
|
return 0;
|
|
}
|