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
* PROJECT: ReactOS version of ntdll
@ -29,14 +29,82 @@
/* 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)
{
char line [INPUT_BUFFER_SIZE];
char *s;
char *name;
int sys_call_idx;
char *nr_args;
char *stmp;
char *snr_args;
/*
* Main SSDT Header
@ -67,15 +135,7 @@ char *stmp;
{
/* Extract the NtXXX name */
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
printf("%3d \"%s\"\n",sys_call_idx | INDEX,name);
#endif
@ -123,14 +183,8 @@ char *stmp;
/* Extract the NtXXX name */
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';
}
snr_args = (char *)strtok(NULL," \t");
#ifdef VERBOSE
printf("%3d \"%s\"\n",sys_call_idx|INDEX,name);
#endif
@ -143,7 +197,7 @@ char *stmp;
* Now write the current system call's ID
* 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 */
sys_call_idx++;
@ -177,21 +231,17 @@ process(
char * s;
char * name; /* NtXXX name */
int sys_call_idx; /* NtXXX index number in the service table */
char * nr_args; /* stack_size / machine_word_size */
char * stmp;
int stacksize;
char * snr_args; /* stack_size / machine_word_size */
/*
* GDI32 stubs file header
*/
fprintf(out1,"// Machine generated, don't edit\n");
fprintf(out1,"\n\n");
write_stub_header(out1);
/*
* USER32 stubs file header
*/
fprintf(out2,"// Machine generated, don't edit\n");
fprintf(out2,"\n\n");
write_stub_header(out2);
/*
* Scan the database. DB is a text file; each line
@ -230,48 +280,13 @@ process(
/* Extract the NtXXX name */
name = (char *)strtok(s," \t");
/* Extract the stack size */
nr_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';
}
snr_args = (char *)strtok(NULL," \t");
#ifdef VERBOSE
printf("%3d \"%s\"\n",sys_call_idx | INDEX,name);
#endif
/*
* 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);
write_syscall_stub(out1, out2, name, strtoul(snr_args, NULL, 0), sys_call_idx | INDEX);
/* Next system call index */
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
* PROJECT: ReactOS version of ntdll
@ -11,6 +11,12 @@
* to twin NtXXX calls, via int 0x2e (x86).
* 19990617 (ea)
* 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 ****************************************************************/
void write_syscall_stub(FILE* out, FILE* out3, char* name, char* name2,
char* nr_args, unsigned int sys_call_idx)
void write_stub_header(FILE * out)
{
#ifdef PARAMETERIZED_LIBS
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);
fprintf(out,"\"_%s@%s:\\n\\t\"\n",name,nr_args);
fprintf(out,"\"_%s@%s:\\n\\t\"\n",name2,nr_args);
#else
fprintf(out,"__asm__(\"\\n\\t.global _%s\\n\\t\"\n",name);
fprintf(out,"\".global _%s\\n\\t\"\n",name2);
fprintf(out,"\"_%s:\\n\\t\"\n",name);
fprintf(out,"\"_%s:\\n\\t\"\n",name2);
#endif
fprintf(out,"\t\"pushl\t%%ebp\\n\\t\"\n");
fprintf(out,"\t\"movl\t%%esp, %%ebp\\n\\t\"\n");
fprintf(out,"\t\"mov\t$%d,%%eax\\n\\t\"\n",sys_call_idx);
fprintf(out,"\t\"lea\t8(%%ebp),%%edx\\n\\t\"\n");
fprintf(out,"\t\"int\t$0x2E\\n\\t\"\n");
fprintf(out,"\t\"popl\t%%ebp\\n\\t\"\n");
fprintf(out,"\t\"ret\t$%s\\n\\t\");\n\n",nr_args);
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* 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
* current system call. ZwXXX does NOT
* alias the corresponding NtXXX call.
*/
fprintf(out3,"__asm__(\n");
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);
write_syscall_stub_func(out3, name2, nr_args, sys_call_idx);
}
int makeSystemServiceTable(FILE *in, FILE *out)
@ -74,13 +117,13 @@ char *s;
char *name;
char *name2;
int sys_call_idx;
char *nr_args;
char *snr_args;
char *stmp;
/*
* Main SSDT Header
*/
fprintf(out,"// Machine generated, don't edit\n");
fprintf(out,"/* Machine generated, don't edit */\n");
fprintf(out,"\n\n");
/*
@ -114,12 +157,12 @@ char *stmp;
/* Extract the ZwXXX name */
name2 = (char *)strtok(NULL," \t");
//value = strtok(NULL," \t");
/* Extract the stack size */
nr_args = (char *)strtok(NULL," \t");
/* Extract the argument count */
snr_args = (char *)strtok(NULL," \t");
/*
* Remove, if present, the trailing LF.
*/
if ((stmp = strchr(nr_args, '\n')) != NULL)
if ((stmp = strchr(snr_args, '\n')) != NULL)
{
*stmp = '\0';
}
@ -173,15 +216,8 @@ char *stmp;
/* Extract the ZwXXX name */
name2 = (char *)strtok(NULL," \t");
//value = strtok(NULL," \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';
}
/* Extract the argument count */
snr_args = (char *)strtok(NULL," \t");
#ifdef VERBOSE
printf("%3d \"%s\"\n",sys_call_idx,name);
#endif
@ -194,7 +230,7 @@ char *stmp;
* Now write the current system call's ID
* 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 * name2; /* ZwXXX name */
int sys_call_idx; /* NtXXX index number in the service table */
char * nr_args; /* stack_size / machine_word_size */
char * stmp;
char * snr_args; /* stack_size / machine_word_size */
/*
* NTDLL stubs file header
*/
fprintf(out,"// Machine generated, don't edit\n");
fprintf(out,"\n\n");
write_stub_header(out);
/*
* NTOSKRNL Zw functions stubs header
*/
fprintf(out3,"// Machine generated, don't edit\n");
fprintf(out3,"\n\n");
write_stub_header(out3);
/*
* Scan the database. DB is a text file; each line
* is a record, which contains data for one system
@ -274,20 +308,16 @@ process(
s = & line[0];
if ((*s) != '#' && (*s) != '\0')
{
unsigned nr_args;
/* Extract the NtXXX name */
name = (char *)strtok(s," \t");
/* Extract the ZwXXX name */
name2 = (char *)strtok(NULL," \t");
//value = strtok(NULL," \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';
}
/* Extract the argument count */
snr_args = (char *)strtok(NULL," \t");
nr_args = strtoul(snr_args, NULL, 0);
#ifdef VERBOSE
printf("%3d \"%s\"\n",sys_call_idx,name);
#endif

View file

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