System call thunk generation made marginally more portable:

- generate real C functions with inline asm. Should fix a problem with cross-compilation on 64-bit hosts
 - store parameter count, not parameter block size in sysfuncs.lst

svn path=/trunk/; revision=9119
This commit is contained in:
KJK::Hyperion 2004-04-12 22:07:45 +00:00
parent b7a5d0ed98
commit ba45b57272
3 changed files with 386 additions and 341 deletions

View file

@ -1,4 +1,4 @@
/* $Id: genw32k.c,v 1.9 2004/04/07 15:32:24 ekohl Exp $ /* $Id: genw32k.c,v 1.10 2004/04/12 22:07:45 hyperion Exp $
* *
* COPYRIGHT: See COPYING in the top level directory * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS version of ntdll * PROJECT: ReactOS version of ntdll
@ -29,14 +29,82 @@
/* FUNCTIONS ****************************************************************/ /* FUNCTIONS ****************************************************************/
void write_stub_header(FILE * out)
{
fputs
(
"/* Machine generated, don't edit */\n"
"\n"
"#ifdef __cplusplus\n"
"#define EXTERN_C extern \"C\"\n"
"#else\n"
"#define EXTERN_C\n"
"#endif\n"
"\n"
"EXTERN_C static __inline__ __attribute__((regparm(2)))"
"void*ZwRosSystemServiceThunk(long n,void*a)"
"{"
"void*ret;"
"__asm__"
"("
"\"int $0x2E\":"
"\"=a\"(ret):"
"\"a\"(n),\"d\"(a)"
");"
"return ret;"
"}\n",
out
);
}
void write_syscall_stub_func(FILE* out, char* name, unsigned nr_args,
unsigned int sys_call_idx)
{
unsigned i;
fprintf(out, "EXTERN_C void*__stdcall %s(", name);
if(nr_args == 0)
fputs("void", out);
else
for(i = 0; i < nr_args; ++ i)
{
if(i > 0)
fputs(",", out);
fprintf(out, "void*a%u", i);
}
fputs("){", out);
if(nr_args > 1)
for(i = 1; i < nr_args; ++ i)
fprintf(out, "(void)a%u;", i);
fprintf(out, "return ZwRosSystemServiceThunk(%u,", sys_call_idx);
if(nr_args == 0)
fputs("0", out);
else
fputs("&a0", out);
fputs(");}\n", out);
}
void write_syscall_stub(FILE* out1, FILE* out2, char* name,
unsigned nr_args, unsigned int sys_call_idx)
{
write_syscall_stub_func(out1, name, nr_args, sys_call_idx);
write_syscall_stub_func(out2, name, nr_args, sys_call_idx);
}
int makeSystemServiceTable(FILE *in, FILE *out) int makeSystemServiceTable(FILE *in, FILE *out)
{ {
char line [INPUT_BUFFER_SIZE]; char line [INPUT_BUFFER_SIZE];
char *s; char *s;
char *name; char *name;
int sys_call_idx; int sys_call_idx;
char *nr_args; char *snr_args;
char *stmp;
/* /*
* Main SSDT Header * Main SSDT Header
@ -67,15 +135,7 @@ char *stmp;
{ {
/* Extract the NtXXX name */ /* Extract the NtXXX name */
name = (char *)strtok(s," \t"); name = (char *)strtok(s," \t");
/* Extract the stack size */
nr_args = (char *)strtok(NULL," \t");
/*
* Remove, if present, the trailing LF.
*/
if ((stmp = strchr(nr_args, '\n')) != NULL)
{
*stmp = '\0';
}
#ifdef VERBOSE #ifdef VERBOSE
printf("%3d \"%s\"\n",sys_call_idx | INDEX,name); printf("%3d \"%s\"\n",sys_call_idx | INDEX,name);
#endif #endif
@ -123,14 +183,8 @@ char *stmp;
/* Extract the NtXXX name */ /* Extract the NtXXX name */
name = (char *)strtok(s," \t"); name = (char *)strtok(s," \t");
/* Extract the stack size */ /* Extract the stack size */
nr_args = (char *)strtok(NULL," \t"); snr_args = (char *)strtok(NULL," \t");
/*
* Remove, if present, the trailing LF.
*/
if ((stmp = strchr(nr_args, '\n')) != NULL)
{
*stmp = '\0';
}
#ifdef VERBOSE #ifdef VERBOSE
printf("%3d \"%s\"\n",sys_call_idx|INDEX,name); printf("%3d \"%s\"\n",sys_call_idx|INDEX,name);
#endif #endif
@ -143,7 +197,7 @@ char *stmp;
* Now write the current system call's ID * Now write the current system call's ID
* in the service table along with its Parameters Size. * in the service table along with its Parameters Size.
*/ */
fprintf(out,"\t\t%d",atoi(nr_args) * sizeof(void*)); fprintf(out,"\t\t%lu * sizeof(void*)", strtoul(snr_args, NULL, 0));
/* Next system call index */ /* Next system call index */
sys_call_idx++; sys_call_idx++;
@ -177,21 +231,17 @@ process(
char * s; char * s;
char * name; /* NtXXX name */ char * name; /* NtXXX name */
int sys_call_idx; /* NtXXX index number in the service table */ int sys_call_idx; /* NtXXX index number in the service table */
char * nr_args; /* stack_size / machine_word_size */ char * snr_args; /* stack_size / machine_word_size */
char * stmp;
int stacksize;
/* /*
* GDI32 stubs file header * GDI32 stubs file header
*/ */
fprintf(out1,"// Machine generated, don't edit\n"); write_stub_header(out1);
fprintf(out1,"\n\n");
/* /*
* USER32 stubs file header * USER32 stubs file header
*/ */
fprintf(out2,"// Machine generated, don't edit\n"); write_stub_header(out2);
fprintf(out2,"\n\n");
/* /*
* Scan the database. DB is a text file; each line * Scan the database. DB is a text file; each line
@ -230,48 +280,13 @@ process(
/* Extract the NtXXX name */ /* Extract the NtXXX name */
name = (char *)strtok(s," \t"); name = (char *)strtok(s," \t");
/* Extract the stack size */ /* Extract the stack size */
nr_args = (char *)strtok(NULL," \t"); snr_args = (char *)strtok(NULL," \t");
stacksize = atoi(nr_args)*sizeof(void*);
/*
* Remove, if present, the trailing LF.
*/
if ((stmp = strchr(nr_args, '\n')) != NULL)
{
*stmp = '\0';
}
#ifdef VERBOSE #ifdef VERBOSE
printf("%3d \"%s\"\n",sys_call_idx | INDEX,name); printf("%3d \"%s\"\n",sys_call_idx | INDEX,name);
#endif #endif
/* write_syscall_stub(out1, out2, name, strtoul(snr_args, NULL, 0), sys_call_idx | INDEX);
* Write the GDI32 stub for the current system call.
*/
#ifdef PARAMETERIZED_LIBS
fprintf(out1,"__asm__(\"\\n\\t.global _%s@%d\\n\\t\"\n",name,stacksize);
fprintf(out1,"\"_%s@%d:\\n\\t\"\n",name,stacksize);
#else
fprintf(out1,"__asm__(\"\\n\\t.global _%s\\n\\t\"\n",name);
fprintf(out1,"\"_%s:\\n\\t\"\n",name);
#endif
fprintf(out1,"\t\"mov\t$%d,%%eax\\n\\t\"\n",sys_call_idx | INDEX);
fprintf(out1,"\t\"lea\t4(%%esp),%%edx\\n\\t\"\n");
fprintf(out1,"\t\"int\t$0x2E\\n\\t\"\n");
fprintf(out1,"\t\"ret\t$%d\\n\\t\");\n\n",stacksize);
/*
* Write the USER32 stub for the current system call
*/
#ifdef PARAMETERIZED_LIBS
fprintf(out2,"__asm__(\"\\n\\t.global _%s@%d\\n\\t\"\n",name,stacksize);
fprintf(out2,"\"_%s@%d:\\n\\t\"\n",name,stacksize);
#else
fprintf(out2,"__asm__(\"\\n\\t.global _%s\\n\\t\"\n",name);
fprintf(out2,"\"_%s:\\n\\t\"\n",name);
#endif
fprintf(out2,"\t\"mov\t$%d,%%eax\\n\\t\"\n",sys_call_idx | INDEX);
fprintf(out2,"\t\"lea\t4(%%esp),%%edx\\n\\t\"\n");
fprintf(out2,"\t\"int\t$0x2E\\n\\t\"\n");
fprintf(out2,"\t\"ret\t$%d\\n\\t\");\n\n",stacksize);
/* Next system call index */ /* Next system call index */
sys_call_idx++; sys_call_idx++;

View file

@ -1,4 +1,4 @@
/* $Id: genntdll.c,v 1.16 2004/04/07 15:32:41 ekohl Exp $ /* $Id: genntdll.c,v 1.17 2004/04/12 22:07:45 hyperion Exp $
* *
* COPYRIGHT: See COPYING in the top level directory * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS version of ntdll * PROJECT: ReactOS version of ntdll
@ -11,6 +11,12 @@
* to twin NtXXX calls, via int 0x2e (x86). * to twin NtXXX calls, via int 0x2e (x86).
* 19990617 (ea) * 19990617 (ea)
* Fixed a bug in function numbers in kernel ZwXXX stubs. * Fixed a bug in function numbers in kernel ZwXXX stubs.
* 20040406 (kjkh)
* The sysfuncs.lst file now specifies the number of parameters,
* not their stack size, for obvious portability reastons. Also, we
* now generate real C functions to let the compiler do the correct
* name decoration and whatever else (this also makes this tool
* marginally more portable).
* *
*/ */
@ -28,43 +34,80 @@
/* FUNCTIONS ****************************************************************/ /* FUNCTIONS ****************************************************************/
void write_syscall_stub(FILE* out, FILE* out3, char* name, char* name2, void write_stub_header(FILE * out)
char* nr_args, unsigned int sys_call_idx)
{ {
#ifdef PARAMETERIZED_LIBS fputs
fprintf(out,"__asm__(\"\\n\\t.global _%s@%s\\n\\t\"\n",name,nr_args); (
fprintf(out,"\".global _%s@%s\\n\\t\"\n",name2,nr_args); "/* Machine generated, don't edit */\n"
fprintf(out,"\"_%s@%s:\\n\\t\"\n",name,nr_args); "\n"
fprintf(out,"\"_%s@%s:\\n\\t\"\n",name2,nr_args); "#ifdef __cplusplus\n"
#else "#define EXTERN_C extern \"C\"\n"
fprintf(out,"__asm__(\"\\n\\t.global _%s\\n\\t\"\n",name); "#else\n"
fprintf(out,"\".global _%s\\n\\t\"\n",name2); "#define EXTERN_C\n"
fprintf(out,"\"_%s:\\n\\t\"\n",name); "#endif\n"
fprintf(out,"\"_%s:\\n\\t\"\n",name2); "\n"
#endif "EXTERN_C static __inline__ __attribute__((regparm(2)))"
fprintf(out,"\t\"pushl\t%%ebp\\n\\t\"\n"); "void*ZwRosSystemServiceThunk(long n,void*a)"
fprintf(out,"\t\"movl\t%%esp, %%ebp\\n\\t\"\n"); "{"
fprintf(out,"\t\"mov\t$%d,%%eax\\n\\t\"\n",sys_call_idx); "void*ret;"
fprintf(out,"\t\"lea\t8(%%ebp),%%edx\\n\\t\"\n"); "__asm__"
fprintf(out,"\t\"int\t$0x2E\\n\\t\"\n"); "("
fprintf(out,"\t\"popl\t%%ebp\\n\\t\"\n"); "\"int $0x2E\":"
fprintf(out,"\t\"ret\t$%s\\n\\t\");\n\n",nr_args); "\"=a\"(ret):"
"\"a\"(n),\"d\"(a)"
");"
"return ret;"
"}\n",
out
);
}
void write_syscall_stub_func(FILE* out, char* name, unsigned nr_args,
unsigned int sys_call_idx)
{
unsigned i;
fprintf(out, "EXTERN_C void*__stdcall %s(", name);
if(nr_args == 0)
fputs("void", out);
else
for(i = 0; i < nr_args; ++ i)
{
if(i > 0)
fputs(",", out);
fprintf(out, "void*a%u", i);
}
fputs("){", out);
if(nr_args > 1)
for(i = 1; i < nr_args; ++ i)
fprintf(out, "(void)a%u;", i);
fprintf(out, "return ZwRosSystemServiceThunk(%u,", sys_call_idx);
if(nr_args == 0)
fputs("0", out);
else
fputs("&a0", out);
fputs(");}\n", out);
}
void write_syscall_stub(FILE* out, FILE* out3, char* name, char* name2,
unsigned nr_args, unsigned int sys_call_idx)
{
write_syscall_stub_func(out, name, nr_args, sys_call_idx);
write_syscall_stub_func(out, name2, nr_args, sys_call_idx);
/* /*
* Now write the NTOSKRNL stub for the * Now write the NTOSKRNL stub for the
* current system call. ZwXXX does NOT * current system call. ZwXXX does NOT
* alias the corresponding NtXXX call. * alias the corresponding NtXXX call.
*/ */
fprintf(out3,"__asm__(\n"); write_syscall_stub_func(out3, name2, nr_args, sys_call_idx);
fprintf(out3,"\".global _%s@%s\\n\\t\"\n",name2,nr_args);
fprintf(out3,"\"_%s@%s:\\n\\t\"\n",name2,nr_args);
fprintf(out3,"\t\"pushl\t%%ebp\\n\\t\"\n");
fprintf(out3,"\t\"movl\t%%esp, %%ebp\\n\\t\"\n");
fprintf(out3,"\t\"mov\t$%d,%%eax\\n\\t\"\n",sys_call_idx);
fprintf(out3,"\t\"lea\t8(%%ebp),%%edx\\n\\t\"\n");
fprintf(out3,"\t\"int\t$0x2E\\n\\t\"\n");
fprintf(out3,"\t\"popl\t%%ebp\\n\\t\"\n");
fprintf(out3,"\t\"ret\t$%s\\n\\t\");\n\n",nr_args);
} }
int makeSystemServiceTable(FILE *in, FILE *out) int makeSystemServiceTable(FILE *in, FILE *out)
@ -74,13 +117,13 @@ char *s;
char *name; char *name;
char *name2; char *name2;
int sys_call_idx; int sys_call_idx;
char *nr_args; char *snr_args;
char *stmp; char *stmp;
/* /*
* Main SSDT Header * Main SSDT Header
*/ */
fprintf(out,"// Machine generated, don't edit\n"); fprintf(out,"/* Machine generated, don't edit */\n");
fprintf(out,"\n\n"); fprintf(out,"\n\n");
/* /*
@ -114,12 +157,12 @@ char *stmp;
/* Extract the ZwXXX name */ /* Extract the ZwXXX name */
name2 = (char *)strtok(NULL," \t"); name2 = (char *)strtok(NULL," \t");
//value = strtok(NULL," \t"); //value = strtok(NULL," \t");
/* Extract the stack size */ /* Extract the argument count */
nr_args = (char *)strtok(NULL," \t"); snr_args = (char *)strtok(NULL," \t");
/* /*
* Remove, if present, the trailing LF. * Remove, if present, the trailing LF.
*/ */
if ((stmp = strchr(nr_args, '\n')) != NULL) if ((stmp = strchr(snr_args, '\n')) != NULL)
{ {
*stmp = '\0'; *stmp = '\0';
} }
@ -173,15 +216,8 @@ char *stmp;
/* Extract the ZwXXX name */ /* Extract the ZwXXX name */
name2 = (char *)strtok(NULL," \t"); name2 = (char *)strtok(NULL," \t");
//value = strtok(NULL," \t"); //value = strtok(NULL," \t");
/* Extract the stack size */ /* Extract the argument count */
nr_args = (char *)strtok(NULL," \t"); snr_args = (char *)strtok(NULL," \t");
/*
* Remove, if present, the trailing LF.
*/
if ((stmp = strchr(nr_args, '\n')) != NULL)
{
*stmp = '\0';
}
#ifdef VERBOSE #ifdef VERBOSE
printf("%3d \"%s\"\n",sys_call_idx,name); printf("%3d \"%s\"\n",sys_call_idx,name);
#endif #endif
@ -194,7 +230,7 @@ char *stmp;
* Now write the current system call's ID * Now write the current system call's ID
* in the service table along with its Parameters Size. * in the service table along with its Parameters Size.
*/ */
fprintf(out,"\t\t%s",nr_args); fprintf(out,"\t\t%lu * sizeof(void *)",strtoul(snr_args, NULL, 0));
} }
} }
/* /*
@ -226,20 +262,18 @@ process(
char * name; /* NtXXX name */ char * name; /* NtXXX name */
char * name2; /* ZwXXX name */ char * name2; /* ZwXXX name */
int sys_call_idx; /* NtXXX index number in the service table */ int sys_call_idx; /* NtXXX index number in the service table */
char * nr_args; /* stack_size / machine_word_size */ char * snr_args; /* stack_size / machine_word_size */
char * stmp;
/* /*
* NTDLL stubs file header * NTDLL stubs file header
*/ */
fprintf(out,"// Machine generated, don't edit\n"); write_stub_header(out);
fprintf(out,"\n\n");
/* /*
* NTOSKRNL Zw functions stubs header * NTOSKRNL Zw functions stubs header
*/ */
fprintf(out3,"// Machine generated, don't edit\n"); write_stub_header(out3);
fprintf(out3,"\n\n");
/* /*
* Scan the database. DB is a text file; each line * Scan the database. DB is a text file; each line
* is a record, which contains data for one system * is a record, which contains data for one system
@ -274,20 +308,16 @@ process(
s = & line[0]; s = & line[0];
if ((*s) != '#' && (*s) != '\0') if ((*s) != '#' && (*s) != '\0')
{ {
unsigned nr_args;
/* Extract the NtXXX name */ /* Extract the NtXXX name */
name = (char *)strtok(s," \t"); name = (char *)strtok(s," \t");
/* Extract the ZwXXX name */ /* Extract the ZwXXX name */
name2 = (char *)strtok(NULL," \t"); name2 = (char *)strtok(NULL," \t");
//value = strtok(NULL," \t"); //value = strtok(NULL," \t");
/* Extract the stack size */ /* Extract the argument count */
nr_args = (char *)strtok(NULL," \t"); snr_args = (char *)strtok(NULL," \t");
/* nr_args = strtoul(snr_args, NULL, 0);
* Remove, if present, the trailing LF.
*/
if ((stmp = strchr(nr_args, '\n')) != NULL)
{
*stmp = '\0';
}
#ifdef VERBOSE #ifdef VERBOSE
printf("%3d \"%s\"\n",sys_call_idx,name); printf("%3d \"%s\"\n",sys_call_idx,name);
#endif #endif

View file

@ -1,213 +1,213 @@
NtAcceptConnectPort ZwAcceptConnectPort 24 NtAcceptConnectPort ZwAcceptConnectPort 6
NtAccessCheck ZwAccessCheck 32 NtAccessCheck ZwAccessCheck 8
NtAccessCheckAndAuditAlarm ZwAccessCheckAndAuditAlarm 44 NtAccessCheckAndAuditAlarm ZwAccessCheckAndAuditAlarm 11
NtAddAtom ZwAddAtom 8 NtAddAtom ZwAddAtom 2
NtAdjustGroupsToken ZwAdjustGroupsToken 24 NtAdjustGroupsToken ZwAdjustGroupsToken 6
NtAdjustPrivilegesToken ZwAdjustPrivilegesToken 24 NtAdjustPrivilegesToken ZwAdjustPrivilegesToken 6
NtAlertResumeThread ZwAlertResumeThread 8 NtAlertResumeThread ZwAlertResumeThread 2
NtAlertThread ZwAlertThread 4 NtAlertThread ZwAlertThread 1
NtAllocateLocallyUniqueId ZwAllocateLocallyUniqueId 4 NtAllocateLocallyUniqueId ZwAllocateLocallyUniqueId 1
NtAllocateUuids ZwAllocateUuids 12 NtAllocateUuids ZwAllocateUuids 3
NtAllocateVirtualMemory ZwAllocateVirtualMemory 24 NtAllocateVirtualMemory ZwAllocateVirtualMemory 6
NtCallbackReturn ZwCallbackReturn 12 NtCallbackReturn ZwCallbackReturn 3
NtCancelIoFile ZwCancelIoFile 8 NtCancelIoFile ZwCancelIoFile 2
NtCancelTimer ZwCancelTimer 8 NtCancelTimer ZwCancelTimer 2
NtClearEvent ZwClearEvent 4 NtClearEvent ZwClearEvent 1
NtClose ZwClose 4 NtClose ZwClose 1
NtCloseObjectAuditAlarm ZwCloseObjectAuditAlarm 12 NtCloseObjectAuditAlarm ZwCloseObjectAuditAlarm 3
NtCompleteConnectPort ZwCompleteConnectPort 4 NtCompleteConnectPort ZwCompleteConnectPort 1
NtConnectPort ZwConnectPort 32 NtConnectPort ZwConnectPort 8
NtContinue ZwContinue 8 NtContinue ZwContinue 2
NtCreateDirectoryObject ZwCreateDirectoryObject 12 NtCreateDirectoryObject ZwCreateDirectoryObject 3
NtCreateEvent ZwCreateEvent 20 NtCreateEvent ZwCreateEvent 5
NtCreateEventPair ZwCreateEventPair 12 NtCreateEventPair ZwCreateEventPair 3
NtCreateFile ZwCreateFile 44 NtCreateFile ZwCreateFile 11
NtCreateIoCompletion ZwCreateIoCompletion 16 NtCreateIoCompletion ZwCreateIoCompletion 4
NtCreateKey ZwCreateKey 28 NtCreateKey ZwCreateKey 7
NtCreateMailslotFile ZwCreateMailslotFile 32 NtCreateMailslotFile ZwCreateMailslotFile 8
NtCreateMutant ZwCreateMutant 16 NtCreateMutant ZwCreateMutant 4
NtCreateNamedPipeFile ZwCreateNamedPipeFile 56 NtCreateNamedPipeFile ZwCreateNamedPipeFile 14
NtCreatePagingFile ZwCreatePagingFile 16 NtCreatePagingFile ZwCreatePagingFile 4
NtCreatePort ZwCreatePort 20 NtCreatePort ZwCreatePort 5
NtCreateProcess ZwCreateProcess 32 NtCreateProcess ZwCreateProcess 8
NtCreateProfile ZwCreateProfile 36 NtCreateProfile ZwCreateProfile 9
NtCreateSection ZwCreateSection 28 NtCreateSection ZwCreateSection 7
NtCreateSemaphore ZwCreateSemaphore 20 NtCreateSemaphore ZwCreateSemaphore 5
NtCreateSymbolicLinkObject ZwCreateSymbolicLinkObject 16 NtCreateSymbolicLinkObject ZwCreateSymbolicLinkObject 4
NtCreateThread ZwCreateThread 32 NtCreateThread ZwCreateThread 8
NtCreateTimer ZwCreateTimer 16 NtCreateTimer ZwCreateTimer 4
NtCreateToken ZwCreateToken 52 NtCreateToken ZwCreateToken 13
NtCreateWaitablePort ZwCreateWaitablePort 20 NtCreateWaitablePort ZwCreateWaitablePort 5
NtDelayExecution ZwDelayExecution 8 NtDelayExecution ZwDelayExecution 2
NtDeleteAtom ZwDeleteAtom 4 NtDeleteAtom ZwDeleteAtom 1
NtDeleteFile ZwDeleteFile 4 NtDeleteFile ZwDeleteFile 1
NtDeleteKey ZwDeleteKey 4 NtDeleteKey ZwDeleteKey 1
NtDeleteObjectAuditAlarm ZwDeleteObjectAuditAlarm 12 NtDeleteObjectAuditAlarm ZwDeleteObjectAuditAlarm 3
NtDeleteValueKey ZwDeleteValueKey 8 NtDeleteValueKey ZwDeleteValueKey 2
NtDeviceIoControlFile ZwDeviceIoControlFile 40 NtDeviceIoControlFile ZwDeviceIoControlFile 10
NtDisplayString ZwDisplayString 4 NtDisplayString ZwDisplayString 1
NtDuplicateObject ZwDuplicateObject 28 NtDuplicateObject ZwDuplicateObject 7
NtDuplicateToken ZwDuplicateToken 24 NtDuplicateToken ZwDuplicateToken 6
NtEnumerateKey ZwEnumerateKey 24 NtEnumerateKey ZwEnumerateKey 6
NtEnumerateValueKey ZwEnumerateValueKey 24 NtEnumerateValueKey ZwEnumerateValueKey 6
NtExtendSection ZwExtendSection 8 NtExtendSection ZwExtendSection 2
NtFindAtom ZwFindAtom 8 NtFindAtom ZwFindAtom 2
NtFlushBuffersFile ZwFlushBuffersFile 8 NtFlushBuffersFile ZwFlushBuffersFile 2
NtFlushInstructionCache ZwFlushInstructionCache 12 NtFlushInstructionCache ZwFlushInstructionCache 3
NtFlushKey ZwFlushKey 4 NtFlushKey ZwFlushKey 1
NtFlushVirtualMemory ZwFlushVirtualMemory 16 NtFlushVirtualMemory ZwFlushVirtualMemory 4
NtFlushWriteBuffer ZwFlushWriteBuffer 0 NtFlushWriteBuffer ZwFlushWriteBuffer 0
NtFreeVirtualMemory ZwFreeVirtualMemory 16 NtFreeVirtualMemory ZwFreeVirtualMemory 4
NtFsControlFile ZwFsControlFile 40 NtFsControlFile ZwFsControlFile 10
NtGetContextThread ZwGetContextThread 8 NtGetContextThread ZwGetContextThread 2
NtGetPlugPlayEvent ZwGetPlugPlayEvent 16 NtGetPlugPlayEvent ZwGetPlugPlayEvent 4
NtGetTickCount ZwGetTickCount 4 NtGetTickCount ZwGetTickCount 1
NtImpersonateClientOfPort ZwImpersonateClientOfPort 8 NtImpersonateClientOfPort ZwImpersonateClientOfPort 2
NtImpersonateThread ZwImpersonateThread 12 NtImpersonateThread ZwImpersonateThread 3
NtInitializeRegistry ZwInitializeRegistry 4 NtInitializeRegistry ZwInitializeRegistry 1
NtListenPort ZwListenPort 8 NtListenPort ZwListenPort 2
NtLoadDriver ZwLoadDriver 4 NtLoadDriver ZwLoadDriver 1
NtLoadKey ZwLoadKey 8 NtLoadKey ZwLoadKey 2
NtLoadKey2 ZwLoadKey2 12 NtLoadKey2 ZwLoadKey2 3
NtLockFile ZwLockFile 40 NtLockFile ZwLockFile 10
NtLockVirtualMemory ZwLockVirtualMemory 16 NtLockVirtualMemory ZwLockVirtualMemory 4
NtMakeTemporaryObject ZwMakeTemporaryObject 4 NtMakeTemporaryObject ZwMakeTemporaryObject 1
NtMapViewOfSection ZwMapViewOfSection 40 NtMapViewOfSection ZwMapViewOfSection 10
NtNotifyChangeDirectoryFile ZwNotifyChangeDirectoryFile 36 NtNotifyChangeDirectoryFile ZwNotifyChangeDirectoryFile 9
NtNotifyChangeKey ZwNotifyChangeKey 40 NtNotifyChangeKey ZwNotifyChangeKey 10
NtOpenDirectoryObject ZwOpenDirectoryObject 12 NtOpenDirectoryObject ZwOpenDirectoryObject 3
NtOpenEvent ZwOpenEvent 12 NtOpenEvent ZwOpenEvent 3
NtOpenEventPair ZwOpenEventPair 12 NtOpenEventPair ZwOpenEventPair 3
NtOpenFile ZwOpenFile 24 NtOpenFile ZwOpenFile 6
NtOpenIoCompletion ZwOpenIoCompletion 12 NtOpenIoCompletion ZwOpenIoCompletion 3
NtOpenKey ZwOpenKey 12 NtOpenKey ZwOpenKey 3
NtOpenMutant ZwOpenMutant 12 NtOpenMutant ZwOpenMutant 3
NtOpenObjectAuditAlarm ZwOpenObjectAuditAlarm 48 NtOpenObjectAuditAlarm ZwOpenObjectAuditAlarm 12
NtOpenProcess ZwOpenProcess 16 NtOpenProcess ZwOpenProcess 4
NtOpenProcessToken ZwOpenProcessToken 12 NtOpenProcessToken ZwOpenProcessToken 3
NtOpenSection ZwOpenSection 12 NtOpenSection ZwOpenSection 3
NtOpenSemaphore ZwOpenSemaphore 12 NtOpenSemaphore ZwOpenSemaphore 3
NtOpenSymbolicLinkObject ZwOpenSymbolicLinkObject 12 NtOpenSymbolicLinkObject ZwOpenSymbolicLinkObject 3
NtOpenThread ZwOpenThread 16 NtOpenThread ZwOpenThread 4
NtOpenThreadToken ZwOpenThreadToken 16 NtOpenThreadToken ZwOpenThreadToken 4
NtOpenTimer ZwOpenTimer 12 NtOpenTimer ZwOpenTimer 3
NtPlugPlayControl ZwPlugPlayControl 16 NtPlugPlayControl ZwPlugPlayControl 4
NtPrivilegeCheck ZwPrivilegeCheck 12 NtPrivilegeCheck ZwPrivilegeCheck 3
NtPrivilegedServiceAuditAlarm ZwPrivilegedServiceAuditAlarm 20 NtPrivilegedServiceAuditAlarm ZwPrivilegedServiceAuditAlarm 5
NtPrivilegeObjectAuditAlarm ZwPrivilegeObjectAuditAlarm 24 NtPrivilegeObjectAuditAlarm ZwPrivilegeObjectAuditAlarm 6
NtProtectVirtualMemory ZwProtectVirtualMemory 20 NtProtectVirtualMemory ZwProtectVirtualMemory 5
NtPulseEvent ZwPulseEvent 8 NtPulseEvent ZwPulseEvent 2
NtQueryInformationAtom ZwQueryInformationAtom 20 NtQueryInformationAtom ZwQueryInformationAtom 5
NtQueryAttributesFile ZwQueryAttributesFile 8 NtQueryAttributesFile ZwQueryAttributesFile 2
NtQueryDefaultLocale ZwQueryDefaultLocale 8 NtQueryDefaultLocale ZwQueryDefaultLocale 2
NtQueryDirectoryFile ZwQueryDirectoryFile 44 NtQueryDirectoryFile ZwQueryDirectoryFile 11
NtQueryDirectoryObject ZwQueryDirectoryObject 28 NtQueryDirectoryObject ZwQueryDirectoryObject 7
NtQueryEaFile ZwQueryEaFile 36 NtQueryEaFile ZwQueryEaFile 9
NtQueryEvent ZwQueryEvent 20 NtQueryEvent ZwQueryEvent 5
NtQueryFullAttributesFile ZwQueryFullAttributesFile 8 NtQueryFullAttributesFile ZwQueryFullAttributesFile 2
NtQueryInformationFile ZwQueryInformationFile 20 NtQueryInformationFile ZwQueryInformationFile 5
NtQueryInformationPort ZwQueryInformationPort 20 NtQueryInformationPort ZwQueryInformationPort 5
NtQueryInformationProcess ZwQueryInformationProcess 20 NtQueryInformationProcess ZwQueryInformationProcess 5
NtQueryInformationThread ZwQueryInformationThread 20 NtQueryInformationThread ZwQueryInformationThread 5
NtQueryInformationToken ZwQueryInformationToken 20 NtQueryInformationToken ZwQueryInformationToken 5
NtQueryIntervalProfile ZwQueryIntervalProfile 8 NtQueryIntervalProfile ZwQueryIntervalProfile 2
NtQueryIoCompletion ZwQueryIoCompletion 20 NtQueryIoCompletion ZwQueryIoCompletion 5
NtQueryKey ZwQueryKey 20 NtQueryKey ZwQueryKey 5
NtQueryMultipleValueKey ZwQueryMultipleValueKey 24 NtQueryMultipleValueKey ZwQueryMultipleValueKey 6
NtQueryMutant ZwQueryMutant 20 NtQueryMutant ZwQueryMutant 5
NtQueryObject ZwQueryObject 20 NtQueryObject ZwQueryObject 5
NtQueryOleDirectoryFile ZwQueryOleDirectoryFile 44 NtQueryOleDirectoryFile ZwQueryOleDirectoryFile 11
NtQueryPerformanceCounter ZwQueryPerformanceCounter 8 NtQueryPerformanceCounter ZwQueryPerformanceCounter 2
NtQuerySection ZwQuerySection 20 NtQuerySection ZwQuerySection 5
NtQuerySecurityObject ZwQuerySecurityObject 20 NtQuerySecurityObject ZwQuerySecurityObject 5
NtQuerySemaphore ZwQuerySemaphore 20 NtQuerySemaphore ZwQuerySemaphore 5
NtQuerySymbolicLinkObject ZwQuerySymbolicLinkObject 12 NtQuerySymbolicLinkObject ZwQuerySymbolicLinkObject 3
NtQuerySystemEnvironmentValue ZwQuerySystemEnvironmentValue 16 NtQuerySystemEnvironmentValue ZwQuerySystemEnvironmentValue 4
NtQuerySystemInformation ZwQuerySystemInformation 16 NtQuerySystemInformation ZwQuerySystemInformation 4
NtQuerySystemTime ZwQuerySystemTime 4 NtQuerySystemTime ZwQuerySystemTime 1
NtQueryTimer ZwQueryTimer 20 NtQueryTimer ZwQueryTimer 5
NtQueryTimerResolution ZwQueryTimerResolution 12 NtQueryTimerResolution ZwQueryTimerResolution 3
NtQueryValueKey ZwQueryValueKey 24 NtQueryValueKey ZwQueryValueKey 6
NtQueryVirtualMemory ZwQueryVirtualMemory 24 NtQueryVirtualMemory ZwQueryVirtualMemory 6
NtQueryVolumeInformationFile ZwQueryVolumeInformationFile 20 NtQueryVolumeInformationFile ZwQueryVolumeInformationFile 5
NtQueueApcThread ZwQueueApcThread 20 NtQueueApcThread ZwQueueApcThread 5
NtRaiseException ZwRaiseException 12 NtRaiseException ZwRaiseException 3
NtRaiseHardError ZwRaiseHardError 24 NtRaiseHardError ZwRaiseHardError 6
NtReadFile ZwReadFile 36 NtReadFile ZwReadFile 9
NtReadFileScatter ZwReadFileScatter 36 NtReadFileScatter ZwReadFileScatter 9
NtReadRequestData ZwReadRequestData 24 NtReadRequestData ZwReadRequestData 6
NtReadVirtualMemory ZwReadVirtualMemory 20 NtReadVirtualMemory ZwReadVirtualMemory 5
NtRegisterThreadTerminatePort ZwRegisterThreadTerminatePort 4 NtRegisterThreadTerminatePort ZwRegisterThreadTerminatePort 1
NtReleaseMutant ZwReleaseMutant 8 NtReleaseMutant ZwReleaseMutant 2
NtReleaseSemaphore ZwReleaseSemaphore 12 NtReleaseSemaphore ZwReleaseSemaphore 3
NtRemoveIoCompletion ZwRemoveIoCompletion 20 NtRemoveIoCompletion ZwRemoveIoCompletion 5
NtReplaceKey ZwReplaceKey 12 NtReplaceKey ZwReplaceKey 3
NtReplyPort ZwReplyPort 8 NtReplyPort ZwReplyPort 2
NtReplyWaitReceivePort ZwReplyWaitReceivePort 16 NtReplyWaitReceivePort ZwReplyWaitReceivePort 4
NtReplyWaitReplyPort ZwReplyWaitReplyPort 8 NtReplyWaitReplyPort ZwReplyWaitReplyPort 2
NtRequestPort ZwRequestPort 8 NtRequestPort ZwRequestPort 2
NtRequestWaitReplyPort ZwRequestWaitReplyPort 12 NtRequestWaitReplyPort ZwRequestWaitReplyPort 3
NtResetEvent ZwResetEvent 8 NtResetEvent ZwResetEvent 2
NtRestoreKey ZwRestoreKey 12 NtRestoreKey ZwRestoreKey 3
NtResumeThread ZwResumeThread 8 NtResumeThread ZwResumeThread 2
NtSaveKey ZwSaveKey 8 NtSaveKey ZwSaveKey 2
NtSetIoCompletion ZwSetIoCompletion 20 NtSetIoCompletion ZwSetIoCompletion 5
NtSetContextThread ZwSetContextThread 8 NtSetContextThread ZwSetContextThread 2
NtSetDefaultHardErrorPort ZwSetDefaultHardErrorPort 4 NtSetDefaultHardErrorPort ZwSetDefaultHardErrorPort 1
NtSetDefaultLocale ZwSetDefaultLocale 8 NtSetDefaultLocale ZwSetDefaultLocale 2
NtSetEaFile ZwSetEaFile 16 NtSetEaFile ZwSetEaFile 4
NtSetEvent ZwSetEvent 8 NtSetEvent ZwSetEvent 2
NtSetHighEventPair ZwSetHighEventPair 4 NtSetHighEventPair ZwSetHighEventPair 1
NtSetHighWaitLowEventPair ZwSetHighWaitLowEventPair 4 NtSetHighWaitLowEventPair ZwSetHighWaitLowEventPair 1
NtSetHighWaitLowThread ZwSetHighWaitLowThread 0 NtSetHighWaitLowThread ZwSetHighWaitLowThread 0
NtSetInformationFile ZwSetInformationFile 20 NtSetInformationFile ZwSetInformationFile 5
NtSetInformationKey ZwSetInformationKey 16 NtSetInformationKey ZwSetInformationKey 4
NtSetInformationObject ZwSetInformationObject 16 NtSetInformationObject ZwSetInformationObject 4
NtSetInformationProcess ZwSetInformationProcess 16 NtSetInformationProcess ZwSetInformationProcess 4
NtSetInformationThread ZwSetInformationThread 16 NtSetInformationThread ZwSetInformationThread 4
NtSetInformationToken ZwSetInformationToken 16 NtSetInformationToken ZwSetInformationToken 4
NtSetIntervalProfile ZwSetIntervalProfile 8 NtSetIntervalProfile ZwSetIntervalProfile 2
NtSetLdtEntries ZwSetLdtEntries 24 NtSetLdtEntries ZwSetLdtEntries 6
NtSetLowEventPair ZwSetLowEventPair 4 NtSetLowEventPair ZwSetLowEventPair 1
NtSetLowWaitHighEventPair ZwSetLowWaitHighEventPair 4 NtSetLowWaitHighEventPair ZwSetLowWaitHighEventPair 1
NtSetLowWaitHighThread ZwSetLowWaitHighThread 0 NtSetLowWaitHighThread ZwSetLowWaitHighThread 0
NtSetSecurityObject ZwSetSecurityObject 12 NtSetSecurityObject ZwSetSecurityObject 3
NtSetSystemEnvironmentValue ZwSetSystemEnvironmentValue 8 NtSetSystemEnvironmentValue ZwSetSystemEnvironmentValue 2
NtSetSystemInformation ZwSetSystemInformation 12 NtSetSystemInformation ZwSetSystemInformation 3
NtSetSystemPowerState ZwSetSystemPowerState 12 NtSetSystemPowerState ZwSetSystemPowerState 3
NtSetSystemTime ZwSetSystemTime 8 NtSetSystemTime ZwSetSystemTime 2
NtSetTimer ZwSetTimer 28 NtSetTimer ZwSetTimer 7
NtSetTimerResolution ZwSetTimerResolution 12 NtSetTimerResolution ZwSetTimerResolution 3
NtSetValueKey ZwSetValueKey 24 NtSetValueKey ZwSetValueKey 6
NtSetVolumeInformationFile ZwSetVolumeInformationFile 20 NtSetVolumeInformationFile ZwSetVolumeInformationFile 5
NtShutdownSystem ZwShutdownSystem 4 NtShutdownSystem ZwShutdownSystem 1
NtSignalAndWaitForSingleObject ZwSignalAndWaitForSingleObject 16 NtSignalAndWaitForSingleObject ZwSignalAndWaitForSingleObject 4
NtStartProfile ZwStartProfile 4 NtStartProfile ZwStartProfile 1
NtStopProfile ZwStopProfile 4 NtStopProfile ZwStopProfile 1
NtSuspendThread ZwSuspendThread 8 NtSuspendThread ZwSuspendThread 2
NtSystemDebugControl ZwSystemDebugControl 24 NtSystemDebugControl ZwSystemDebugControl 6
NtTerminateProcess ZwTerminateProcess 8 NtTerminateProcess ZwTerminateProcess 2
NtTerminateThread ZwTerminateThread 8 NtTerminateThread ZwTerminateThread 2
NtTestAlert ZwTestAlert 0 NtTestAlert ZwTestAlert 0
NtUnloadDriver ZwUnloadDriver 4 NtUnloadDriver ZwUnloadDriver 1
NtUnloadKey ZwUnloadKey 4 NtUnloadKey ZwUnloadKey 1
NtUnlockFile ZwUnlockFile 20 NtUnlockFile ZwUnlockFile 5
NtUnlockVirtualMemory ZwUnlockVirtualMemory 16 NtUnlockVirtualMemory ZwUnlockVirtualMemory 4
NtUnmapViewOfSection ZwUnmapViewOfSection 8 NtUnmapViewOfSection ZwUnmapViewOfSection 2
NtVdmControl ZwVdmControl 8 NtVdmControl ZwVdmControl 2
NtWaitForMultipleObjects ZwWaitForMultipleObjects 20 NtWaitForMultipleObjects ZwWaitForMultipleObjects 5
NtWaitForSingleObject ZwWaitForSingleObject 12 NtWaitForSingleObject ZwWaitForSingleObject 3
NtWaitHighEventPair ZwWaitHighEventPair 4 NtWaitHighEventPair ZwWaitHighEventPair 1
NtWaitLowEventPair ZwWaitLowEventPair 4 NtWaitLowEventPair ZwWaitLowEventPair 1
NtWriteFile ZwWriteFile 36 NtWriteFile ZwWriteFile 9
NtWriteFileGather ZwWriteFileGather 36 NtWriteFileGather ZwWriteFileGather 9
NtWriteRequestData ZwWriteRequestData 24 NtWriteRequestData ZwWriteRequestData 6
NtWriteVirtualMemory ZwWriteVirtualMemory 20 NtWriteVirtualMemory ZwWriteVirtualMemory 5
NtW32Call ZwW32Call 20 NtW32Call ZwW32Call 5
NtCreateChannel ZwCreateChannel 8 NtCreateChannel ZwCreateChannel 2
NtListenChannel ZwListenChannel 8 NtListenChannel ZwListenChannel 2
NtOpenChannel ZwOpenChannel 8 NtOpenChannel ZwOpenChannel 2
NtReplyWaitSendChannel ZwReplyWaitSendChannel 12 NtReplyWaitSendChannel ZwReplyWaitSendChannel 3
NtSendWaitReplyChannel ZwSendWaitReplyChannel 16 NtSendWaitReplyChannel ZwSendWaitReplyChannel 4
NtSetContextChannel ZwSetContextChannel 4 NtSetContextChannel ZwSetContextChannel 1
NtYieldExecution ZwYieldExecution 0 NtYieldExecution ZwYieldExecution 0