windowsNt内核函数大全
《Windows驱动开发技术详解》之Windows内核函数
《Windows驱动开发技术详解》之Windows内核函数内核模式下字符串操作ANSI_STRING和UNICODE_STRING分别定义如下:以UnicodeString类型对象进⾏初始化为例,代码如下:输出:进⾏复制字符串操作,代码如下:输出:但是如果这⾥改为:加载驱动运⾏就会蓝屏。
Why?其实,RltFreeUnicodeString是⽤来释放利⽤申请的堆空间初始化的UnicodeString类型对象的,⽽RtlInitUnicodeString对UniStr1进⾏初始化时,只是让Buffer指向了⼀个常量区。
进⾏ANSI_STRING字符串与UNICODE_STRING字符串相互转换操作,代码如下:注意这⾥要利⽤RtlFreeUnicodeString释放通过RtlAnsiStringToUnicodeString得到的UniStr2。
为什么这个需要释放?我们利⽤Windbg跟踪下代码。
⾸先,跟踪时要逐⼀,这⾥的勾如果不去掉,就是在源码下单步跟踪,⽽不是在汇编指令⾥单步跟踪:在RtlUnicodeStringToAnsiString函数中,有这么⼀个系统API此时的参数是正好是传⼊的字节数的⼤⼩。
⽽这个API最终调⽤了:所以,我们要利⽤RtlFreeUnicodeString进⾏释放。
内核模式下的⽂件操作:创建⽂件:代码⼊下:1 VOID FILEOPERATION(){2 OBJECT_ATTRIBUTES ObjAttributes;3 IO_STATUS_BLOCK iostatus;4 HANDLE hfile;5 UNICODE_STRING logFileUnicodeString;67 RtlInitUnicodeString(&logFileUnicodeString, L"\\??\\C:\\1.log");8 InitializeObjectAttributes(&ObjAttributes,9 &logFileUnicodeString,10 OBJ_CASE_INSENSITIVE,11 NULL,12 NULL);13//创建⽂件14 NTSTATUS status = ZwCreateFile(&hfile, GENERIC_WRITE,15 &ObjAttributes,16 &iostatus,17 NULL,18 FILE_ATTRIBUTE_NORMAL,19 FILE_SHARE_READ,20 FILE_OPEN_IF,//这⾥是FILE_OPEN_IF则不论⽂件是否存在都可以Create成功,⽽如果改为FILE_OPEN,则只当⽂件存在时create成功。
windows函数大全-应用
Windows API函数大全(1)Windows API函数大全(2)Windows API函数应用实例----利用Windows API函数和注册表获取系统信息(Delphi 程序实例)(3)VB中调用Windows API函数检测当前系统环境(VB 程序实例)(4)实用的windows API函数一、Windows API函数大全1)网络函数2)消息函数3)文件处理函数4)打印函数5)文本和字体函数6)菜单函数7)位图、图标和光栅运算函数8)绘图函数9)设备场景函数10)硬件与系统函数11)进程和线程函数12)控件与消息函数1.Windows API----网络函数WNetAddConnection 创建同一个网络资源的永久性连接WNetAddConnection2 创建同一个网络资源的连接WNetAddConnection3 创建同一个网络资源的连接WNetCancelConnection 结束一个网络连接WNetCancelConnection2 结束一个网络连接WNetCloseEnum 结束一次枚举操作WNetConnectionDialog 启动一个标准对话框,以便建立同网络资源的连接WNetDisconnectDialog 启动一个标准对话框,以便断开同网络资源的连接WNetEnumResource 枚举网络资源WNetGetConnection 获取本地或已连接的一个资源的网络名称WNetGetLastError 获取网络错误的扩展错误信息WNetGetUniversalName 获取网络中一个文件的远程名称以及/或者UNC(统一命名规范)名称WNetGetUser 获取一个网络资源用以连接的名字WNetOpenEnum 启动对网络资源进行枚举的过程2. Windows API----消息函数BroadcastSystemMessage 将一条系统消息广播给系统中所有的顶级窗口GetMessagePos 取得消息队列中上一条消息处理完毕时的鼠标指针屏幕位置GetMessageTime 取得消息队列中上一条消息处理完毕时的时间PostMessage将一条消息投递到指定窗口的消息队列PostThreadMessage 将一条消息投递给应用程序RegisterWindowMessage 获取分配给一个字串标识符的消息编号ReplyMessage 答复一个消息SendMessage调用一个窗口的窗口函数,将一条消息发给那个窗口SendMessageCallback 将一条消息发给窗口SendMessageTimeout 向窗口发送一条超时消息SendNotifyMessage 向窗口发送一条消息3.Windows API----文件处理函数(windows将网卡、串口等硬件设备当作文件对待)CloseHandle关闭一个内核对象。
WindowsNT40内核模式驱动程序中浮点运算的实现
Windows NT 4.0内核模式驱动程序中浮点运算的实现MicrocomputerApplicationsV o1.18,No.11,2002技术交流微型电脑应用2002年第l8卷第1l期WindowsNT4.0内核模式驱动程序中浮点运算的实现廖小勇冯志彪摘要Windows操作系统是当前测控软件发展的主流操作系统.在WindowsNT操作系统中,内核模式驱动程序作为操作系统的一个信任部分,运行于WindowsNT的内核模式.但是,WindowsNT4.0内核模式不支持浮点运算,本文将就此问题,探讨如何在WindowsNT4.0内核模式驱动程序中实现浮点运算.关键词WindowsNT操作系统用户模式内核模式驱动程序浮点运算一,WindowsNT操作系统的结构目前,Windows环境下测控软件的发展在国外方兴未艾,例如LabView,RealTime等着名软件,它们都因为人机界面的形象直观,操作简单方便等特点,而在软件市场具有着较强的竞争力【1].而WindowsNT4.0操作系统由于其可靠性好,安全性高等优点[2][,已经成为工业控制领域中在PC机上进行应用程序开发的主流操作系统,例如在机器人控制领域也有着成功的应用[4].与所有其他商业操作系统一样,WindowsNT是理想化的目标与推动市场运转的现实相互作用的结果.WindowsNT的设计目标是[5]:兼容性:该操作系统应该支持大量已经存在的软件和遗留的硬件.坚固性和可靠性:该操作系统应该能够经受用户的无意或者有意的攻击,而且各个应用程序应该尽可能地独立.可移植性:该操作系统应该能够增加新的功能和支持新的I/o设备,而不用涉及现有的代码基.性能:该操作系统应该能够在常用的硬件上提供合理的性能,还应该利用如多处理器这样的功能部件. WindowsNT系统是建立在Math以及V ax思想之上的一种客户/服务器模型操作系统,由一个特权执行体以及一系列被称为保护子系统的非特权服务器组成.整个操作系统被分为用户模式及内核模式,如图l所示.所谓特权,是指CPU的操作方式,大多数的处理器都有一种甚至若干种特权方式.在特权方式下,所有机器指令都可执行并且系统内存可存取.在非特权方式下,某些机器指令不能执行并且系统内存不可存取.在WindowsNT下,内核模式就是指处于特权处理器方式下,而用户模式总处于非特权处理器方式下.ProtectedSubsystems④④\,\.一r…'④@图lWindowsNT操作系统的结构内核模式又被称为WindowsNT执行体,包括了系统服务以及硬件抽象层(HAL),它们运行于CPU的特权层Ring0.系统服务包含了一个操作系统的所有应用服务,文件系统,进程控制,内存管理,设备管理等等.WindowsNT中除了微内核外,另外还包含了一些独特的部分,如对象管理器,配置管理器,执行体支持,本地过程调用,安全监视器,所有这些都建立在HAL之上.I/o管理器实现对设备的管理,包含了文件系统,中间介质以及设备驱动.通过HAL,WindowsNT可以防止内核以及WindowsNT执行体的其它部分受硬件平台不同的影响;另外WindowsNT还将网络管理器加入了内核模式..用户模式包括了一些保护子系统,如0S/2子系统,PoSIX子系统,安全子系统,当然还有最常用的Win32子系统,WindowsNT都称之为服务器.它们运行于CPU的用户层Ring3,建立在服务器上的各类应用程序被称为客户.二,WindowsNT操作系统中的驱动程序在WindowsNT系统中包括两种基本类型的驱动程序:用户模式驱动程序以及内核模式驱动程序.前者运行于用户层Ring3,后者运行于特权层Ring0.廖小勇上海市同济大学电子与信息工程学院信息与控制工程系博士研究生上海200092冯志彪上海市同济大学电子与信息工程学院信息与控制工程系教授上海200092 58MicrocomputerApplicationsV o1.18,No.11,2002技术交流微型电脑应用2002年第l8卷第11期用户模式驱动程序包括Win32多媒体驱动程序,支持MS--DOS应用程序的虚拟设备驱动程序(VDD)以及其它保护子系统的驱动程序等;用户模式驱动程序是一种特殊的子系统.内核模式驱动程序有针对逻辑的,虚拟的以及物理的设备,通常被称之为NT式驱动程序,它们是WindowsNT执行体的一部分;所谓新技术NT(NewTechnology)以及基于微内核的操作系统,就是指能支持一个或多个保护子系统.NT式驱动程序是基于以下目标设计的:可移植性,硬件和软件可配置性,总是抢占和可中断的,在多处理平台上的安全性,基于对象,可重用的I/O请求包,支持异步传输.由于NT式驱动程序运行于内核模式,所以NT式驱动程序只能使用系统所提供的内核模式运行库(形如RtlXxx的内核模式例程),文件系统驱动程序还可以使用文件系统的运行库(形如FsRtIXxx的内核模式例程);在WindowsNT内核模式不支持浮点运算.大部分WindowsNT组件都用C语言编写,只有一小部分硬件抽象层(HAL)和内核代码基于效率的原因用汇编语言编写.NT式驱动程序同样也是使用c语言编写,这样可以在不同平台上保证源代码级兼容.NT式驱动程序开发者不能使用系统不支持的C运行库,所以最好使用ANSIC标准运行库.如上所述,由于WindowsNT内核模式不支持浮点运算,所以当我们需要在WinowsNT内核模式驱动程序中进行浮点运算时,我们必须严格遵守相应的规则,以保证系统的稳定性.本文以下将就此问题进行详细的探讨.三,WindowsNT内核模式驱动程序中浮点运算的使用规则I.驱动程序的运行环境WindowsNT操作系统是一个多任务操作系统,在系统中有许多个线程同时运行,它们共享系统CPU以及浮点单元(FPU)等;因此,任何线程在使用系统CPU以及浮点单元时必须确保不影响其他线程的使用状态,也就是说,任何线程在结束使用系统CPU以及浮点单元之后必须将它们恢复到使用之前的原始状态.另外,WindowsNT内核模式驱动程序是基于I/O请求包驱动的,在同一时刻可能有任意个用户模式线程向该驱动程序发出I/O请求,驱动程序必须考虑到这种情况并且进行正确地处理.因此,驱动程序可能运行在任意的用户线程环境中,由此驱动程序代码必须确保具有可重入性.根据以上讨论,当驱动程序进行浮点运算时,它必须访问相应的浮点单元;对于驱动程序来说,在使用浮点单元之前, 它必须将此浮点单元初始化到一个确定的初始状态,以保证浮点运算结果的正确性以及满足相应的精度;同时在使用之前驱动程序还需要保存此浮点单元的原始状态,以便该驱动程序在结束使用该浮点单元之后,再将此浮点单元的状态恢复到使用之前的原始状态,由此确保系统其他线程正确稳定地运行.2.浮点单元的保存以及恢复WindowsNT4.0操作系统提供了两个并未公开发丰的内核模式例程,它们分别为:KeSaveFloatingPointState以及KeRestoreFloatingPointState,这两个例程在MicrosoftDDK forwindowsNT4.0文档中并未公开发布,它们的原型分别如下所示:NTSTA TUSKeSaveFloatingPointState(KFLOATING—SA—V A);NTSTA TUSKeRestoreFloatingPointState(KFLOATING—SA VE*);其中,KFLOA TING—SAVE是一个内核结构,驱动程序在调用以上两个内核模式例程时必须分配一个如KFLOAT—ING—SA VE内核结构大小的缓冲区,分别用于保存以及恢复有关寄存器状态等.当驱动程序需要进行浮点运算时,它必须首先调用Ke—saveFloatingPointstate内核例程,然后再进行相应的浮点运算,最后再调用KeRestoreFloatingPointState内核例程.相关代码结构如下所示://Allocatebufferbythedriver.KFLOA TING—SAVEsaveData;//Definethereturncode;NTSTA TUSStatus://Trytosavethefloating--pointstate. Status—KeSaveFloatingPointState(&saveData);//Makesurethatthereisnoerror.if(NT—SUCCESS(Status)){//Herefloating--pointcomputationcanbedone! KeRestoreFloatingPointState(~y.saveData))其中,KeSaveFloatingPointState内核例程的功能为:保存有关寄存器(如STO—ST7,MMXO—MMX7以及XMM10--XMM17等)状态初始化浮点单元KeRestoreFloatingPointState内核例程的功能为:恢复由KeSaveFloatingPointState内核例程所保存的有关寄存器状态.必须说明的是:以上两个内核例程的调用必须满足IRQL口DISPATCH—LEVEL.IRQL即中断请求级,它是由WindowsNT操作系统所定义的;它定义了系统CPU当前活动的重要性,IRQL越高,则表明系统CPU执行当前任务的重要性也越大.(下转第62页)59?MicrocomputerApplicationsV o1.18,No.11.2002技术交流擞型电脑应用2002年第l8卷第ll期CASE9Is—Message="验证口令"CASE10Is—Message一验证工程"CASE12Is—Message一"验证连接速度"CASE13Is—Message一"重新验证"CASE14is—Message一"通过验证CASE15Is—Message一准备收回"CASE16is—Message一ODEM初始化CASE17Is—Message一"等待收回CASE8192Is—Message=连接成功"ENDCH00SERETURN(Is—Message)(6)函数If—errortext()/*功能:将错误号转换文本,无参数返回:string类型,返回错误文本*/stringIs—Errorls—Error='错误号是:"+String(oi—error—number)+"(请查找出错原因)RETURNIs—Error5.编写脚本(1)在窗口中定义变量:UO—rasiuo—ras写下如下script: iuo—ras—createUO—ras(2)按钮cb—dial的clicked事件脚本:integerli—retli—ret—iuo—ras.Lf—dial(sle—telephone.text,sle—user—name.text,sle—password,handle(parent))ifli—ret<>OthenMessagebox("Dialerror",If—errortext(1i—ret),Stop—Sign!)endif(3)按钮cb—hangup的clicked事件脚本:li_hangup()(4)按钮cb~close的clicked事件脚本:close(parent)(5)窗口的open事件脚本ii-rasmessage=If—getmessage()6.调试运行应用程序运行该远程登录窗口.即可以通过拨号实现远程登录参考文献[1]张长富等,PowerBuilder6.0用户参考手册,北京:北京希望电子出版社[2]PowerBuilderversion6.0onlinebooks,1998(收稿日期:2002年4月28E1)(上接第59页)WindowsNT使用特定类型CPU所提供的机制来实现IRQL 模型.当一个中断到达系统CPU时,系统CPU比较请求中断的IRQL值与系统CPU的当前IRQL值:如果请求中断的IRQL值等于或者小于系统CPU当前的IRQL值,则该中断请求被忽略;否则,系统CPU的当前活动将被中断.另外,驱动程序在每次调用KeSaveF1oatingPointstate内核例程之后,都必须检查该内核例程的返回值,确保在此次内核例程调用过程中没有发生任何错误之后,驱动程序才能进行相应的浮点运算;否则,驱动程序就不能进行任何浮点运算.例如:当系统内存不足时,KeSaveFIoatingPointState内核例程调用将可能发生错误,此时,驱动程序就不能进行浮点运算.四,结论本文主要讨论了在WindowsNT4.0操作系统内核模式驱动程序中浮点运算的实现规则以及有关的注意事项,并给出了相关的代码实现结构.按照以上所讨论的浮点运算实现62?规则,作者在WindowsNT4.0操作系统内核模式驱动程序中成功地实现了相应的浮点运算.参考文献[1]吴奇,范大鹏,彭丽,"WindowsNT下设备驱动程序的开发",计算机系统应用.J999年第6期,第59~61页[2]K.Dallas,"WindowsNT4.0",LANMagazine,V o1.4,Iss.11,pp.23—4,Nov.1996[33T.Y ager."WindowsNTsecurity",UnixReview,V ol,15,Iss9,PP.25—6,28,3O,32,34,Aug.1997[43A.Mertin,P.Sieverding,"RobotcontrolundertheWin—dowsNTcomputeroperatingsystem,Elektronik,v0I_47,Iss.8,PP.118,12O一2,Apr.1998IS]ArtBaker着,科欣翻译组译,"WindowsNT设备驱动程序设计指南",机械工业出版社,1997年12月(收稿日期:2001年12月24日)。
WindowsAPI函数大全(API之进程和线程函数)
WindowsAPI函数大全(API之进程和线程函数)API之进程和线程函数CancelWaitableTimer 这个函数用于取消一个可以等待下去的计时器操作CallNamedPipe 这个函数由一个希望通过管道通信的一个客户进程调用ConnectNamedPipe 指示一台服务器等待下去,直至客户机同一个命名管道连接CreateEvent 创建一个事件对象CreateMailslot 创建一个邮路。
返回的句柄由邮路服务器使用(收件人)CreateMutex 创建一个互斥体(MUTEX)CreateNamedPipe 创建一个命名管道。
返回的句柄由管道的服务器端使用CreatePipe 创建一个匿名管道CreateProcess 创建一个新进程(比如执行一个程序)CreateSemaphore 创建一个新的信号机CreateWaitableTimer 创建一个可等待的计时器对象DisconnectNamedPipe 断开一个客户与一个命名管道的连接DuplicateHandle 在指出一个现有系统对象当前句柄的情况下,为那个对象创建一个新句柄ExitProcess 中止一个进程FindCloseChangeNotification 关闭一个改动通知对象FindExecutable 查找与一个指定文件关联在一起的程序的文件名FindFirstChangeNotification 创建一个文件通知对象。
该对象用于监视文件系统发生的变化FindNextChangeNotification 重设一个文件改变通知对象,令其继续监视下一次变化FreeLibrary 释放指定的动态链接库GetCurrentProcess 获取当前进程的一个伪句柄GetCurrentProcessId 获取当前进程一个唯一的标识符GetCurrentThread 获取当前线程的一个伪句柄GetCurrentThreadId 获取当前线程一个唯一的线程标识符GetExitCodeProces 获取一个已中断进程的退出代码GetExitCodeThread 获取一个已中止线程的退出代码GetHandleInformation 获取与一个系统对象句柄有关的信息GetMailslotInfo 获取与一个邮路有关的信息GetModuleFileName 获取一个已装载模板的完整路径名称GetModuleHandle 获取一个应用程序或动态链接库的模块句柄GetPriorityClass 获取特定进程的优先级别GetProcessShutdownParameters 调查系统关闭时一个指定的进程相对于其它进程的关闭早迟情况GetProcessTimes 获取与一个进程的经过时间有关的信息GetProcessWorkingSetSize 了解一个应用程序在运行过程中实际向它交付了多大容量的内存GetSartupInfo 获取一个进程的启动信息GetThreadPriority 获取特定线程的优先级别GetTheardTimes 获取与一个线程的经过时间有关的信息GetWindowThreadProcessId 获取与指定窗口关联在一起的一个进程和线程标识符LoadLibrary 载入指定的动态链接库,并将它映射到当前进程使用的地址空间LoadLibraryEx 装载指定的动态链接库,并为当前进程把它映射到地址空间LoadModule 载入一个Windows应用程序,并在指定的环境中运行MsgWaitForMultipleObjects 等侯单个对象或一系列对象发出信号。
createthread函数用法
createthread函数用法CreateThread函数用于在Windows系统中创建一个新线程,并返回新线程的句柄。
它主要是封装了内核函数NtCreateThread(),调用CreateThread时会创建一个新线程,并将新线程中所有上下文相关的操作都存储在一个栈中。
CreateThread函数的原型是:HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes,SIZE_T dwStackSize,LPTHREAD_START_ROUTINE lpStartAddress,LPVOID lpParameter,DWORD dwCreationFlags,LPDWORD lpThreadId);参数:1、lpThreadAttributes:Security 与线程属性相关的参数,可以设置线程的安全性。
2、dwStackSize:线程栈大小,如果为0,就使用操作系统默认的大小,一般都不设置。
3、lpStartAddress:线程的主函数的地址,即新建线程的入口函数,此函数的原型为DWORD WINAPI ThreadFunc(LPVOID lparam)。
4、lpParameter:指向线程函数的参数的指针,可以是任意类型的参数指针。
5、dwCreationFlags:线程的表现形式,可以设置为CREATE_SUSPEND或者CREATE_BREAKAWAY_FROM_JOB或者建立多个线程时的设置。
6、lpThreadId:用来接收新建线程的id。
通过CreateThread函数可以很方便地创建新线程,但是要注意新建线程的函数原型必须是DWORD WINAPI ThreadFunc(LPVOID lparam) ,其中lparam指向函数的参数类型可以为任意类型,且线程函数必须返回一个DWORD类型的数据,并且在线程结束之后也必须返回此类型数据。
ssdt内置函数
ssdt内置函数
在SSDT(系统服务描述表)中,有数百个内置函数可用于实现系统调用。
以下是一些常见的SSDT内置函数:
1. NtCreateFile:创建或打开一个文件。
2. NtOpenProcess:打开一个已存在的进程。
3. NtCreateProcess:创建一个新进程。
4. NtTerminateProcess:终止一个进程。
5. NtAllocateVirtualMemory:分配虚拟内存。
6. NtFreeVirtualMemory:释放虚拟内存。
7. NtProtectVirtualMemory:修改虚拟内存的访问权限。
8. NtCreateThread:创建一个新线程。
9. NtWriteFile:写入文件数据。
10. NtReadFile:读取文件数据。
11. NtDeviceIoControlFile:向设备发送控制命令。
12. NtQuerySystemInformation:查询系统信息。
13. NtSetInformationThread:设置线程信息。
14. NtQueryInformationProcess:查询进程信息。
15. NtCreateEvent:创建一个系统事件。
16. NtSetEvent:设置一个处于未激发状态的系统事件。
17. NtWaitForSingleObject:等待一个系统事件变为激发状态。
18. NtClose:关闭一个内核对象句柄。
注意:这些函数通常是保护等级最高的函数,只有内核权限的代码才能够调用它们。
Zw函数与Nt函数的分别与联系
Zw函数与Nt函数的分别与联系Ring3中的NATIVE API,和Ring0的系统调⽤,都有同名的Zw和Nt系列函数,⼀度让初学者感到迷糊。
N久前的我,也是相当的迷糊。
现在就以ZwOpenProcess和NtOpenProcess函数为例,详细阐述下他们的分别和联系。
ntdll.dll导出了NtOpenProcess和ZwOpenProcess两个函数,我们记为ntdll!NtOpenProcess和ntdll!ZwOpenProcess。
仔细看⼀下,会发现他们的⼊⼝点实际上都是⼀样的,这就是说,ntdll!ZwOpenProcess仅仅是ntdll!NtOpenProcess函数的别名⽽已,实现如下:ZwOpenProcess.text:7C92D5FE mov eax, 7Ah ; NtOpenProcess.text:7C92D603 mov edx, 7FFE0300h.text:7C92D608 call dword ptr [edx].text:7C92D60A retn 10h 7FFE0300h处是ntdll!KiFastSystemCall的⼊⼝,ntdll!KiFastSystemCall会保存起当前的栈指针,然后通过引发0x2e中断,陷⼊内核。
当触发0x2e中断后,CPU将执⾏环境切换到Ring0状态,然后去调⽤内核模块的0x2e处理例程nt!KiSystemService。
nt!KiSystemService会在参数检查、栈拷贝等操作之后,根据Ring3代码传递过来的调⽤号0x7A,在SSDT中查找相应的函数地址,然后调⽤找到的函数。
对于我们的例⼦来说,这个函数就是内核模块的导出函数nt!NtOpenProcess。
nt!NtOpenProcess才是真正的打开进程实现函数。
但是内核模块也导出了nt!ZwOpenProcess,这个nt!ZwOpenProcess,有什么⽤处呢?会不会像ntdll!ZwOpenProcess⼀样,也仅仅是ntdll!NtOpenProcess的⼀个别名?实际上,nt!ZwOpenProcess并不仅仅是nt!NtOpenProcess⼀个别名,我们可以看⼀下nt!ZwOpenProcess的实现:kd> u nt!ZwOpenProcessnt!ZwOpenProcess:804fede8 mov eax,7Ah804feded lea edx,[esp+4]804fedf1 pushfd804fedf2 push 8804fedf4 call nt!KiSystemService (8053d891)804fedf9 ret 10h 与ntdll.ZwOpenProcess是不是很接近?nt!ZwOpenProcess也只是让nt!KiSystemService调⽤SSDT中的第0x7A号函数,他⾃⼰本⾝没有进⾏任何打开进程的实现。
ntoskrnl内部函数
ntoskrnl内部函数
ntoskrnl.exe是Windows操作系统的核心文件之一,它包含了
许多内部函数用于操作系统的核心功能。
这些内部函数包括但不限
于以下几个方面:
1. 内存管理,ntoskrnl.exe包含了许多内部函数用于管理系
统内存,包括分配、释放和管理物理内存和虚拟内存的功能。
这些
函数对于操作系统的稳定性和性能起着至关重要的作用。
2. 进程和线程管理,ntoskrnl.exe中的内部函数负责管理系
统中的进程和线程,包括创建、销毁、调度和同步进程和线程的功能。
这些函数对于操作系统的多任务处理和并发执行起着重要作用。
3. 设备驱动程序接口,ntoskrnl.exe中的内部函数提供了设
备驱动程序的接口,允许设备驱动程序与操作系统进行交互,包括
设备的初始化、数据传输和中断处理等功能。
4. 安全和权限管理,ntoskrnl.exe中的内部函数包括了安全
和权限管理的功能,用于验证用户的身份、控制对系统资源的访问
权限以及执行安全策略等功能。
总的来说,ntoskrnl.exe中的内部函数涵盖了操作系统的核心功能,包括内存管理、进程和线程管理、设备驱动程序接口以及安全和权限管理等方面。
这些内部函数的设计和实现对于操作系统的稳定性、性能和安全性都具有重要意义。
《操作系统》第7章 NT内核Windows操作系统
⑷NT是32位的多任务操作系统,克服了DOS的 NT是32位的多任务操作系统,克服了DOS的 640KB的瓶颈限制.支持对称多CPU,支持多线 640KB的瓶颈限制.支持对称多CPU,支持多线 程. ⑸NT内核WINDOWS操作系统支持多重文件系统 NT内核WINDOWS操作系统支持多重文件系统 与异步I/O以及采用面向对象的软件开发技术. 与异步I/O以及采用面向对象的软件开发技术. 多重文件系统包括:MS-DOS的FAT16/32, 多重文件系统包括:MS-DOS的FAT16/32,OS/2 的高性能文件系统HPFS,CDFS,NTFS. 的高性能文件系统HPFS,CDFS,NTFS.NTFS 支持大容量外存. ⑹ NT内核WINDOWS操作系统内置网络功能, NT内核WINDOWS操作系统内置网络功能, 支持分布式计算和互操作性.NT内核WINDOWS 支持分布式计算和互操作性.NT内核WINDOWS 操作系统采用先进的操作系统结构,客户/ 操作系统采用先进的操作系统结构,客户/服务 器模式,微内核结构,对象模型等. ⑺安全可靠,安全性达到美国政府C2级安全标准. ⑺安全可靠,安全性达到美国政府C2级安全标准.
硬件抽象层HAL 硬件抽象层HAL 硬件抽象层HAL( 硬件抽象层HAL(Hardware Abstraction Layer)将内核,设备驱 Layer)将内核,设备驱 动程序,执行体同硬件分隔,HAL隐藏各种与硬件有关的细节, 动程序,执行体同硬件分隔,HAL隐藏各种与硬件有关的细节, 如I/O接口,中断控制器,多处理机通信机制和依赖于硬件平台 I/O接口,中断控制器,多处理机通信机制和依赖于硬件平台 的函数等.HAL是NT内核WINDOWS操作系统在多种硬件平台可 的函数等.HAL是NT内核WINDOWS操作系统在多种硬件平台可 移植性成为可能的关键技术. Windows NT系列操作系统设计的一个至关重要的方面就是在多 NT系列操作系统设计的一个至关重要的方面就是在多 种硬件平台上的可移植性,硬件抽象层(HAL)就是使这种可移植 种硬件平台上的可移植性,硬件抽象层(HAL)就是使这种可移植 性成为可能的关键部分.HAL是一个可加载的核心态模块Hal.dll, 性成为可能的关键部分.HAL是一个可加载的核心态模块Hal.dll, 它为运行在Windows NT/XP上的硬件提供低级接口.HAL隐藏各 它为运行在Windows NT/XP上的硬件提供低级接口.HAL隐藏各 种与硬件有关的细节,例如I/O接口,中断控制器以及多处理机 种与硬件有关的细节,例如I/O接口,中断控制器以及多处理机 通信机制等任何体系结构专用的和依赖于计算机平台的函数. HAL是一个软件层,用来为操作系统的上层隐藏硬件差异,以提 HAL是一个软件层,用来为操作系统的上层隐藏硬件差异,以提 高Windows NT系列操作系统的可移植性.HAL有一虚拟机接口, NT系列操作系统的可移植性.HAL有一虚拟机接口, 可为内核调度程序,可执行体和设计驱动程序所使用.这种方法 的一个优点是每个设备驱动程序只需要一个版本,即它可运行于 各种硬件平台,而无需移植驱动程序.HAL也支持对称多重处理. 各种硬件平台,而无需移植驱动程序.HAL也支持对称多重处理. 设备驱动程序映射设备并直接访问它们,但是映射内存的管理, 配置I/O总线,设置DMA和处理母板等有关细节,都是由HAL接 配置I/O总线,设置DMA和处理母板等有关细节,都是由HAL接 口提供的.
WindowsAPI函数大全(Windows编程参考手册)
WindowsAPI函数大全(Windows编程参考手册)1、基础服务(Base Services):提供对Windows系统可用的基础资源的访问接口。
比如象:文件系统(file system)、外部设备(device)、,进程(process)、线程(thread)以及访问注册表(Windows registry)和错误处理机制(error handling)。
这些功能接口位于,16位Windows下的kernel.exe、krnl286.exe或krnl386.exe系统文档中;以及32位Windows下的kernel32.dll和advapi32.dll中。
2、图形设备接口(GDI):提供功能为:输出图形内容到显示器、打印机以及其他外部输出设备。
它位于16位Windows下的gdi.exe;以及32位Windows下的gdi32.dll。
3、图形化用户界面(GUI):提供的功能有创建和管理屏幕和大多数基本控件(control),比如按钮和滚动条。
接收鼠标和键盘输入,以及其他与GUI有关的功能。
这些调用接口位于:16位Windows下的user.exe,以及32位Windows下的user32.dll。
从Windows XP 版本之后,基本控件和通用对话框控件(Common Control Library)的调用接口放在comctl32.dll中。
4、通用对话框链接库(Common Dialog Box Library):为应用程序提供标准对话框,比如打开/保存文档对话框、颜色对话框和字体对话框等等。
这个链接库位于:16位Windows下的commdlg.dll 中,以及32位Windows下comdlg32.dll中。
它被归类为User Interface API之下。
5、通用控件链接库(Common Control Library):为应用程序提供接口来访问操作系统提供的一些高级控件。
比如像:状态栏(status bar)、进度条(progress bars)、工具栏(toolbar)和标签(tab)。
windows下系统dll文件大全注释
windows下系统dll文件大全注释它是Dynamic Link Library 的缩写形式,DLL 是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件。
动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。
函数的可执行代码位于一个DLL 中,该DLL 包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。
DLL 还有助于共享数据和资源。
多个应用程序可同时访问内存中单个DLL 副本的内容。
DLL 是一个包含可由多个程序同时使用的代码和数据的库。
例如,在Windows 操作系统中,Comdlg32 DLL 执行与对话框有关的常见函数。
因此,每个程序都可以使用该DLL 中包含的功能来实现“打开”对话框。
这有助于促进代码重用和内存的有效使用。
通过使用DLL,程序可以实现模块化,由相对独立的组件组成。
例如,一个计帐程序可以按模块来销售。
可以在运行时将各个模块加载到主程序中(如果安装了相应模块)。
因为模块是彼此独立的,所以程序的加载速度更快,而且模块只在相应的功能被请求时才加载。
此外,可以更为容易地将更新应用于各个模块,而不会影响该程序的其他部分。
例如,您可能具有一个工资计算程序,而税率每年都会更改。
当这些更改被隔离到DLL 中以后,您无需重新生成或安装整个程序就可以应用更新。
下表说明了Windows 操作系统中的一些作为DLL 实现的文件:• ActiveX 控件(.o cx) 文件ActiveX 控件的一个示例是日历控件,它使您可以从日历中选择日期。
• 控制面板(.cpl) 文件.cpl 文件的一个示例是位于控制面板中的项。
每个项都是一个专用DLL。
• 设备驱动程序(.drv) 文件设备驱动程序的一个示例是控制打印到打印机的打印机驱动程序。
DLL 的优点1、扩展了应用程序的特性;2、可以用许多种编程语言来编写;3、简化了软件项目的管理;4、有助于节省内存;5、有助于资源共享;6、有助于应用程序的本地化;7、有助于解决平台差异;8、可以用于一些特殊的目的。
windowsAPI函数中文详解
windowsAPI函数中⽂详解WindowsAPI函数中⽂详解V1.0⽬录WindowsAPI函数中⽂详解V1.0 ----------------------------------------------------------------------------- 1 VC API常⽤函数简单例⼦⼤全 ---------------------------------------------------------------------------- 6第⼀个:FindWindow根据窗⼝类名或窗⼝标题名来获得窗⼝的句柄,该函数返回窗⼝的句柄------------------------------------------- 6第⼆个:SendMessage根据窗⼝句柄发送⼀个消息给窗⼝6第三个:GetCursorPos获取⿏标当前位置(屏幕) -------- 8第四个:WindowFromPoint根据坐标点获得对应的窗⼝句柄 -------------------------------------------------------------------------------- 9第五个MoveWindow根据窗⼝句柄移动窗⼝,改变窗⼝⼤⼩ ------------------------------------------------------------------------------- 10第六个ShowWindow设置窗⼝显⽰状态,如隐藏,最⼤化,最⼩化------------------------------------------------------------------------- 10第七个SetCursorPos设置⿏标的位置、把⿏标移动到指定的位置------------------------------------------------------------------------- 11第⼋个CopyFile复制⼀个⽂件-------------------------------------- 11第九个DeleteFile删除⼀个⽂件----------------------------------- 11第⼗个CreateDirectory创建⼀个⽂件夹(⽬录) --------- 11第⼗⼀个:GetClientRect获得窗⼝⼤⼩---------------------- 12第⼗⼆个:GetCWindowRect获得窗⼝⼤⼩(相对屏幕)12第⼗三个FindFirstFile寻找⽂件以及获得⽂件的信息------ 13第⼗四个FindNextFile寻找⽂件---------------------------------- 13第⼗五个MoveFile移动⽂件 ---------------------------------------- 14第⼗六个GetClassName根据窗⼝句柄获得窗⼝类名 ----- 14第⼗七个SetFileAttributes设置⽂件属性-------------------- 14第⼗⼋个ShellExecute运⾏⼀个程序函数定义:ShellExecute(HWND hwnd, LPCSTR lpOperation, LPCSTR lpFile, LPCSTR lpParameters, LPCSTR lpDirectory, INT nShowCmd); 第⼀个参数hwnd是⽗窗⼝的句柄,可以为NULL,第⼆个参数lpOperation表⽰⾏为,第三个参数lpFile是程序的路径名,第四个参数lpParameters是给所打开程序的参数,可以为NULL,第五个参数lpDirectory可以为NULL,第六个参数nShowCmd跟ShowWindow函数的第⼆个参数⼀样,作⽤也⼀样,如果打开的程序有窗⼝的话,这个参数就指明了窗⼝如何显⽰. 例如打开⼀个记事本:------------------- 16 第⼗九个PlaySound播放⼀个WAV⽂件--------------------- 16 第⼆⼗个GetModuleFileName根据模块导⼊表获程序的完整路径------------------------------------------------------------------------- 17 第⼆⼗⼀个CreateWindow创建⼀个窗⼝ -------------------- 17 第⼆⼗⼆个GetMessage获取窗⼝消息 ------------------------ 23 第⼆⼗三个RegisterClass注册窗⼝类,参照CreateWindow--------------------------------------------------------- 23 第⼆⼗四个UpdateWindow参照CreateWindow------ 23 第⼆⼗五个DispatchMessage参照CreateWindow-- 23 第⼆⼗六个LoadCursorFromFile从磁盘加载⼀个光标⽂件,函数返回该光标句柄------------------------------------------------ 23 第⼆⼗七个CreateSolidBrush创建⼀个画刷,函数返回画刷句柄------------------------------------------------------------------------- 23 第⼆⼗⼋个LoadImage装载位图、图标、光标函数-------- 24 第⼆⼗九个GetDC根据窗⼝句柄获取设备上下⽂(DC)返回DC句柄 ---------------------------------------------------------------------- 26 第三⼗个Rectnagle在窗⼝中画⼀个矩形 ---------------------- 26 第三⼗个CreateToolhelp32Snapshot给当前进程拍⼀个照 ------------------------------------------------------------------------------- 27 第三⼗⼀个Process32First根据CreateToolhelp32Snapshot函数返回的句柄获取进程信息------------------------------------------------ 27 第三⼗⼆个OpenProcess根据进程ID号获得进程句柄,句柄通过函数返回------------------------------------------------------------------- 28 第三⼗三个TerminateProcess结束⼀个进程(需进程句柄做参数)---------------------------------------------------------------------- 28 第三⼗四个CreatePen创建⼀个画笔(返回画笔句柄) --- 29第三⼗五个CreateSolidBrush创建⼀个画刷---------------- 29 第三⼗六个SelectObject把GDI对象选⼊相应的DC中 29 第三⼗七个 ReadProcessMemory根据进程句柄读取相应的⼀段内存(读其它进程⾥的内存) -------------------------------- 31 第三⼗⼋个WriteProcessMemory根据进程句柄写⼊相应的⼀段内存(写⼊其它进程⾥的内存)----------------------------- 32 第三⼗九个CreateThread创建⼀个线程(多线程)------- 33 第四⼗个GetCurrentProcessId获得当前进程ID ------- 35 第四⼗⼀个CreateCompatibleDC创建⼀个兼容的内存设备上下⽂(DC)----------------------------------------------------------- 35 第四⼗⼆个GetObject获取⼀个对象信息(如位图,图标,光标)------------------------------------------------------------------------- 35 第四⼗三个BitBlt在窗⼝输出⼀个位图 --------------------------- 35第四⼗四个GetWindowText根据窗⼝句柄获得窗⼝标题名37 第四⼗五个SetWindowText根据窗⼝句柄设置窗⼝标题名38 第四⼗六个GetCurrentProcess获得当前线程句柄------- 38第四⼗七个OpenProcessToken获得⼀个进程的访问令牌句柄 ---------------------------------------------------------------------------- 38 第四⼗七个LookupPrivilegeValue函数查看对应系统权限的特权值,返回信息到⼀个LUID结构体⾥上⾯讲过了,进程有权限⼀说,那么⼤家也能猜到,进程权限的信息也⼀定存储在⼀个结构体⾥,这个结构体描述了进程权限相关的⼀些信息。
winmain函数
winmain函数winmain函数________________winmain函数是Windows系统中最重要的函数,它是Windows应用程序的入口函数,也是应用程序的核心。
所有的Windows应用程序都必须具备winmain函数,才能正常运行。
一、winmain函数的定义winmain函数是Windows系统中定义的入口函数,在每一个Windows应用程序中都必须有一个winmain函数,才能使该程序正常运行。
winmain函数的定义如下:int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)其中,hInstance参数表示当前应用程序的实例句柄;hPrevInstance参数表示上一个实例的句柄,一般为NULL;lpCmdLine参数表示命令行参数;nCmdShow参数表示Windows窗口显示状态,比如最大化、最小化和正常显示。
二、winmain函数的功能winmain函数在Windows应用程序中扮演着重要的角色,它有以下几个功能:1、它负责初始化Windows应用程序;2、它负责处理Windows消息;3、它负责清理Windows应用程序;4、它负责启动Windows应用程序的主要流程;5、它还负责处理Windows应用程序中的一些其他任务。
三、winmain函数的作用1、winmain函数作为Windows应用程序的入口函数,它能够让Windows系统正确识别和加载Windows应用程序;2、winmain函数还能够让Windows应用程序正常运行,它负责处理和分发Windows消息;3、winmain函数能够帮助开发者更好地控制Windows应用程序的各个步骤,从而使开发过程更加高效。
四、winmain函数的注意事项1、winmain函数是Windows应用程序的入口函数,所有的Windows应用程序都必须有一个winmain函数;2、winmain函数是一个标准的C语言函数,可以使用C语言中的语法和语义来定义和实现它;3、winmain函数必须使用WINAPI声明,而不能使用C语言中的标准声明;4、winmain函数必须定义在WinMain.c文件中,而不能定义在其他文件中;5、winmain函数必须在WinMain.c文件中声明为公共的(public);6、winmain函数必须以int WINAPI WinMain开头。
ntqueryobject用法
"ntqueryobject"是Windows操作系统内的一个API函数,用于在Windows对象管理器中枚举对象名称。
该函数可以被用于获取进程、线程、服务、事件等Windows操作系统中的各种对象名称。
以下是该函数的常用用法:```c++NTSTATUS NTAPI NtQueryObject(HANDLE ObjectHandle,OBJECT_INFORMATION_CLASS ObjectInformationClass,PVOID ObjectInformation,ULONG ObjectInformationLength,PULONG ReturnLength);```- ObjectHandle:对象句柄,指向要获取信息的对象。
- ObjectInformationClass:指定ObjectInformation的类型。
- ObjectInformation:存储对象信息的缓冲区指针。
- ObjectInformationLength:指定存储对象信息的缓冲区的长度。
- ReturnLength:存储传递给ObjectInformation的数据长度的指针。
其中,ObjectInformationClass是该函数中最为重要的参数,它用于指定要返回的对象信息类型。
常用的信息类型包括:- ObjectNameInformation:用于获取对象名称。
- ObjectTypeInformation:用于获取对象类型。
- ObjectBasicInformation:用于获取对象的基本信息。
ntqueryobject函数的使用需要具备一定的Windows系统编程经验,如果使用不当,可能会对系统造成不可预料的影响。
建议在使用该函数时参考相关开发文档和样例代码。
WindowsAPI函数大全(完整)
WindowsAPI函数⼤全(完整)WNetAddConnection 创建同⼀个⽹络资源的永久性连接WNetAddConnection2 创建同⼀个⽹络资源的连接WNetAddConnection3 创建同⼀个⽹络资源的连接WNetCancelConnection 结束⼀个⽹络连接WNetCancelConnection2 结束⼀个⽹络连接WNetCloseEnum 结束⼀次枚举操作WNetConnectionDialog 启动⼀个标准对话框,以便建⽴同⽹络资源的连接WNetDisconnectDialog 启动⼀个标准对话框,以便断开同⽹络资源的连接WNetEnumResource 枚举⽹络资源WNetGetConnection 获取本地或已连接的⼀个资源的⽹络名称WNetGetLastError 获取⽹络错误的扩展错误信息WNetGetUniversalName 获取⽹络中⼀个⽂件的远程名称以及/或者UNC(统⼀命名规范)名称WNetGetUser 获取⼀个⽹络资源⽤以连接的名字WNetOpenEnum 启动对⽹络资源进⾏枚举的过程BroadcastSystemMessage 将⼀条系统消息⼴播给系统中所有的顶级窗⼝GetMessagePos 取得消息队列中上⼀条消息处理完毕时的⿏标指针屏幕位置GetMessageTime 取得消息队列中上⼀条消息处理完毕时的时间PostMessage 将⼀条消息投递到指定窗⼝的消息队列PostThreadMessage 将⼀条消息投递给应⽤程序RegisterWindowMessage 获取分配给⼀个字串标识符的消息编号ReplyMessage 答复⼀个消息SendMessage 调⽤⼀个窗⼝的窗⼝函数,将⼀条消息发给那个窗⼝SendMessageCallback 将⼀条消息发给窗⼝SendMessageTimeout 向窗⼝发送⼀条消息SendNotifyMessage 向窗⼝发送⼀条消息CloseHandle 关闭⼀个内核对象。
ntuserfindwindowex function
ntuserfindwindowex function ntuserfindwindowex函数是Windows操作系统中的一个API函数,用于在指定程序的顶级窗口中查找符合指定条件的子窗口。
本文将介绍ntuserfindwindowex函数的功能和使用方法,并附带一些常见的应用案例。
第一部分:什么是ntuserfindwindowex函数(150-300字)ntuserfindwindowex函数是Windows操作系统提供的一个强大的窗口查找工具。
它可以在指定程序的顶级窗口中查找符合指定条件的子窗口,并返回找到的子窗口句柄。
这个函数可以帮助开发者快速定位和操作特定的窗口,提高程序的可靠性和用户体验。
第二部分:ntuserfindwindowex函数的使用方法(500-800字)使用ntuserfindwindowex函数的前提是了解函数的参数和返回值。
ntuserfindwindowex函数的原型如下:HWND NTUserFindWindowEx(HWND hwndParent,HWND hwndChildAfter,LPCWSTR lpszClass,LPCWSTR lpszWindow);这个函数接受四个参数:hwndParent、hwndChildAfter、lpszClass和lpszWindow。
1. hwndParent是指定程序的顶级窗口句柄,如果想在整个桌面中查找窗口,可以将它设置为NULL。
2. hwndChildAfter是查找起点的子窗口句柄,如果想从顶级窗口开始查找,可以将它设置为NULL。
3. lpszClass是要查找的窗口类名,可以使用通配符*来匹配任意类名。
4. lpszWindow是要查找的窗口标题,可以使用通配符*来匹配任意标题。
ntuserfindwindowex函数的返回值是找到的子窗口句柄,如果未找到,则返回NULL。
可以使用这个句柄进行后续的窗口操作,如发送消息、修改窗口属性等。
《Windows核心编程》Word文档
《Windows核心编程》Word文档这篇笔记是我在读《Windows核心编程》第5版时做的记录和总结(部分章节是第4版的书),没有摘抄原句,包含了很多我个人的思考和对实现的推断,因此不少条款和Windows实际机制可能有出入,但应该是合理的。
开头几章由于我追求简洁,往往是很多单独的字句,后面的内容更为连贯。
海量细节。
第1章错误处理1.GetLastError返回的是最后的错误码,即更早的错误码可能被覆盖。
2.GetLastError可能用于描述成功的原因(CreatEvent)。
3.VS监视窗口err,hr。
4.FormatMessage。
5.SetLastError。
第2章字符和字符串处理1.ANSI版本的API全部是包装Unicode版本来的,在传参和返回是多了一次编码转换。
2.MS的C库的ANSI和Unicode版本之间也是没有互相调用关系的,没有编码转换开销。
3.宽字符函数:_tcscpy,_tcscat,_tcslen。
4.UNICODE宏是Windows API使用的,而MS的C库中,对于非标准的东西用_前缀区分,所以_UNICODE宏是MS的C API使用的。
5.MS提供的避免缓冲区溢出攻击的函数在文件中,包括StringCbCat和StringCchCat等函数(其中Cb表示Count of Byte,Cch表示Count of Character,都用于表示衡量目标缓冲大小的单位);另外中有_tcscpy_s等_s后缀的函数。
在源串过短时,的函数截断,的函数断言。
6.要想接管CRT的错误处理(比如assert),使用_set_invalid_parameter_handler设置自己的处理函数,然后使用_CrtSetReportMode(_CRT_ASSERT, 0);来禁止CRT弹出对话框。
7.Windows也提供了字符串处理函数,但lstrcat、lstrcpy(针对T字符的)已经过时了,因为没考虑缓冲区溢出攻击。
windows字符串函数
windows字符串函数
Windows字符串函数是一组用于操作字符串的函数,它们可以在Windows操作系统中使用。
这些函数可以执行各种字符串操作,如字符串复制、字符串连接、字符串比较等。
以下是一些常用的Windows 字符串函数:
1. strcpy:复制字符串。
该函数将一个字符串复制到另一个字符串中。
2. strcat:连接字符串。
该函数将两个字符串连接成一个字符串。
3. strcmp:比较字符串。
该函数比较两个字符串是否相同。
4. strlen:计算字符串长度。
该函数计算一个字符串的长度。
5. strchr:查找字符。
该函数在一个字符串中查找指定字符。
6. strstr:查找子串。
该函数在一个字符串中查找指定子串。
7. sprintf:格式化输出。
该函数可以将多个字符串和其他格式的数据组合成一个字符串。
这些函数在Windows开发中非常常用,能够方便地处理各种字符串操作。
在使用时需要注意参数类型、空间分配等问题,以确保程序正常运行。
- 1 -。
ntopenfile函数作用
ntopenfile函数作用ntopenfile函数是Windows操作系统中的一个函数,主要用于打开一个文件并返回一个文件句柄。
本文将详细介绍ntopenfile函数的作用及其使用方法。
ntopenfile函数是Windows内核中的一个API函数,其作用是打开一个文件并返回一个文件句柄,以便后续对文件进行读写操作。
ntopenfile函数属于Windows NT操作系统的内核函数,通常被用于驱动程序或系统级软件中。
ntopenfile函数的原型如下:```cNTSTATUS NTAPI NtOpenFile(PHANDLE FileHandle,ACCESS_MASK DesiredAccess,POBJECT_ATTRIBUTES ObjectAttributes,PIO_STATUS_BLOCK IoStatusBlock,ULONG ShareAccess,ULONG OpenOptions);```该函数有6个参数,分别是:- FileHandle:返回的文件句柄,用于后续对文件进行操作。
- DesiredAccess:指定文件的访问权限,如读、写、删除等。
- ObjectAttributes:指向一个OBJECT_ATTRIBUTES结构体,用于指定待打开文件的属性,如文件名、文件路径等。
- IoStatusBlock:指向一个IO_STATUS_BLOCK结构体,用于返回操作状态信息。
- ShareAccess:指定文件的共享模式,如允许其他进程读取或写入该文件。
- OpenOptions:指定文件的打开选项,如同步读取、异步读取等。
ntopenfile函数的使用方法如下:1. 创建一个OBJECT_ATTRIBUTES结构体并初始化,指定待打开文件的属性。
2. 调用ntopenfile函数,传入相应参数。
3. 若函数调用成功,则可以使用返回的文件句柄对文件进行读写操作。
4. 使用完毕后,需要调用ntclose函数关闭文件句柄,释放资源。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Nt核函数大全NtLoadDriver 服务控制管理器加载设备驱动.NtUnloadDriver 服务控制管理器支持卸载指定的驱动程序. NtRegisterNewDevice 加载新驱动文件.NtQueryIntervalProfile 返回数据.NtSetIntervalProfile 指定采样间隔.NtStartProfile 开始取样.NtStopProfile 停止采样.NtSystemDebugControl 实施了一系列的调试器支持的命令. NtRegisterThreadTerminatePort 一个调试登记通知线程终止. NtCreateDebugObject 创建一个调试对象.NtDebugActiveProcess 使调试器附加到一个积极的过程和调试它. NtDebugContinue 允许一个进程,以线程产生了调试事件. NtQueryDebugFilterState 查询调试过滤国家一级的具体组成部分. NtRemoveProcessDebug 停止调试指定的进程.NtSetDebugFilterState 设置调试输出滤波器一级指定的组成部分. NtSetInformationDebugObject 设置属性的调试对象.NtWaitForDebugEvent 等待调试事件的进程正在调试.NtFlushInstructionCache 清空指定进程的指令缓冲区.NtInitiatePowerAction 启动电源事件.NtPowerInformation 获得该系统的电源状态.NtSetThreadExecutionState 设置一个线程的系统电源状态的要求. NtRequestWakeupLatency 设置一个进程唤醒延迟.NtClose 关闭处理任何对象类型.NtDuplicateObject 复制句柄的对象.NtCreateDirectoryObject 创建一个目录中的对象管理器命名空间. NtCreateSymbolicLinkObject 创建一个符号的对象管理器命名空间. NtOpenDirectoryObject 打开对象管理器名字空间目录.NtQueryDirectoryObject 用列举的对象位于一个目录对象. NtOpenSymbolicLinkObject 打开一个符号对象.NtQuerySymbolicLinkObject 归来的名称,对象,符号点.NtQueryObject 查询对象的属性,如它的名字.NtSetInformationObject 树立了一个对象的属性.NtTranslateFilePath 转换的文件路径的格式.NtCreateKey 创建或打开一个注册表项.NtOpenKey 打开一个现有的注册表项.NtDeleteKey 删除注册表项.NtDeleteValueKey 删除价值.NtEnumerateKey 枚举子项中的一个关键.NtEnumerateValueKey 列举了价值的一个关键.NtFlushKey 刷新变化回到注册表在磁盘上.NtInitializeRegistry 获取注册滚动.单参数对这一规定是否安装启动或正常开机. NtNotifyChangeKey 允许一个程序的通知改变某一关键或其子项.NtQueryKey 查询信息的一个关键.NtQueryMultiplValueKey 检索信息多个指定值.NtQueryValueKey 资讯检索指定的值.NtReplaceKey 变化的支持文件的一个关键和其子项,用于备份/恢复. NtSaveKey 保存的容中的一个关键和子项文件.NtRestoreKey 装载的容主要从一个指定的文件.NtSetInformationKey 集属性中的一个关键.NtSetValueKey 集相关的数据的价值.NtCreatePort 创建一个港口对象.NtAcceptConnectPort 接受一个端口连接.NtCompleteConnectPort 完成了连接.NtConnectPort 连接一个端口到另一个端口,接受连接. NtImpersonateClientOfPort 线程模拟确定的进程的另一端的一个港口. NtListenPort 侦听端口的连接请求.NtQueryInformationPort 获取信息的一个港口.NtReadRequestData 阅读相关资料港口信息.NtReplyPort 发送一个回复.NtReplyWaitReceivePort 发送一个回复,然后等待传入请求消息. NtReplyWaitReplyPort 发送一个回复,然后等待传入的回复.NtRequestPort 发送请求信息.NtRequestWaitReplyPort 发送请求信息,并等待传入的回复. NtWriteRequestData 填写数据的请求消息.NtSecureConnectPort 创建一个安全的连接端口. NtQueryPortInformationProcess 用于确定某个进程有相关的例外或调试端口. NtAccessCheck 检查当前线程是否已进入一个对象根据其安全描述符. NtAccessCheckAndAuditAlarm 生成相关的审计信息存取检查. NtAdjustGroupsToken 加注或删除群体与象征.NtAdjustPrivilegesToken 启用或禁用特权与象征. NtCloseObjectAuditAlarm 生成审计讯息,指出一个对象被关闭了. NtCreateToken 创建令牌对象.NtDeleteObjectAuditAlarm 产生了审计事件表明,一个对象已删除. NtDuplicateToken 重复象征对象.NtImpersonateThread 允许一个线程假冒身份的其他用户. NtOpenObjectAuditAlarm 产生了审计事件表明,一个物体开幕. NtOpenProcessToken 获得句柄令牌在指定的进程.NtOpenThreadToken 打开的句柄令牌在指定线程.NtPrivilegeCheck 检查,以查看是否有人员令牌已指定特权启用. NtPrivilegeObjectAuditAlarm 生成审核事件记录与特权检查. NtPrivilegedServiceAuditAlarm 生成审计信息表明尝试使用指定的特权. NtQueryInformationToken 获取信息的象征.NtQuerySecurityObject 检索信息的对象的安全设置. NtSetInformationToken 树立了一个象征性的属性.NtSetSecurityObject 设置安全信息的一个对象.NtAccessCheckByType 新的物件具体的安全支持. NtAccessCheckByTypeAndAuditAlarm 新的物件具体的安全支持.NtAccessCheckByTypeResultList 新的物件具体的安全支持. NtFilterToken 新的物件具体的安全支持. NtCompareToken 比较了两个令牌. NtOpenProcessTokenEx 打开一个进程令牌. NtOpenThreadTokenEx 打开一个线程令牌. NtAlertResumeThread 恢复线程.NtAlertThread 发出警报,以一个线程.NtTestAlert 检验是否有线程在等待警报. NtCreateProcess 创建一个新的进程.NtCreateThread 创建一个新线程.NtCurrentTeb 返回一个指针,一个线程环境块. NtDelayExecution 睡眠,暂停一个线程在指定的时间. NtGetContextThread 检索硬件方面的线程. NtSetContextThread 集硬件方面的线程.NtOpenProcess 打开的句柄指定的进程.NtOpenThread 打开的句柄指定的线程. NtQueryInformationProcess 获取一个线程的属性. NtQueueApcThread 程序呼叫到一个线程. NtResumeThread 唤醒暂停线程.NtSetInformationProcess 设置一个进程的属性. NtSetInformationThread 设置一个线程的属性. NtSuspendThread 暂停一个线程的执行. NtTerminateProcess 删除进程.NtTerminateThread 删除线程.NtYieldExecution 原因线程放弃CPU. NtCreateProcessEx 创建一个新的进程. NtResumeProcess 恢复被暂停的进程.NtSuspendProcess 暂停一个进程.NtCancelTimer 取消计时器.NtCreateTimer 创建一个计时器.NtOpenTimer 打开一个计时器对象.NtQueryTimer 查询计时器的属性. NtQueryTimerResolution 查询系统的计时器决议. NtSetTimer 设置一个定时器到期活动. NtSetTimerResolution 设定系统计时器决议. NtQueryPerformanceCounter 查询系统的性能计数器. NtQuerySystemTime 取得当前时间.NtSetSystemTime 设置系统时间.NtGetTickCount 获取系统开机以来时间.NtCreateEvent 创建一个事件对象.NtOpenEvent 打开事件对象.NtClearEvent 清除标志着国家的事件.NtPulseEvent 信号的事件,然后重置它.NtQueryEvent 查询状况的一个事件.NtResetEvent 重置事件向非标志着国家.NtSetEvent 树立了一个活动,标志着国家.NtCreateEventPair 创建一个事件一双.NtOpenEventPair 打开一个事件对.NtSetHighEventPair 集高一半的活动,以表明对国家.NtSetHighWaitLowEventPair 集高一半的活动,以表明对国家和等待低一半,成为示意. NtSetLowEventPair 集低一半的事件对.NtSetLowWaitHighEventPair 集低一半的事件,并等待对高一半将成为标志. NtWaitHighEventPair 等待高一半事件对成为暗示.NtWaitLowEventPair 等待低一半事件对成为暗示.NtCreateMutant 创建一个突变的对象,称为互斥在用户模式.NtOpenMutant 打开一个突变对象,称为互斥用户模式.NtCreateSemaphore 创建一个信号灯对象.NtOpenSemaphore 打开一个信号灯对象.NtQuerySemaphore 查询状态的信号.NtReleaseSemaphore 标志着信号灯.NtSignalAndWaitForSingleObject 等待它标志着一次.NtWaitForMultipleObjects 等待多个对象,成为暗示.NtWaitForSingleObject 等待一个单一的对象,成为暗示.NtCreateKeyedEvent 创建一个输入事件对象.NtOpenKeyedEvent 打开一个名为键控事件对象.NtReleaseKeyedEvent 标志着键控事件对象.NtWaitForKeyedEvent 等待事件成为键控信号.NtAllocateVirtualMemory 分配虚拟存.NtFreeVirtualMemory 释放虚拟存.NtQueryVirtualMemory 查询围的虚拟存的属性.NtProtectVirtualMemory 集保护的一系列虚拟存.NtLockVirtualMemory 锁一系列的虚拟存.NtUnlockVirtualMemory 解锁一系列的虚拟存.NtReadVirtualMemory 读取围的虚拟存从进程.NtWriteVirtualMemory 写了一系列的虚拟存从进程.NtFlushVirtualMemory 刷新记忆体映射的记忆体围的文件在磁盘上.NtCreateSection 创建了一系列的存支持文件.NtOpenSection 打开一个名为存映射节对象.NtExtendSection 延长现有的各种虚拟存支持文件.NtMapViewOfSection 地图一个文件中的虚拟存.NtUnmapViewOfSection 一部分虚拟存的支持文件.NtAreMappedFilesTheSame 装载机使用这一有效看看是否一个给定的文件已经被映射到存中. NtCancelIoFile 取消I/O请求.NtCreateFile 创建或打开一个文件,目录或设备对象.NtCreateIoCompletion 告诉I/O管理器,一个线程希望时得到通知的I/O完成. NtOpenIoCompletion 打开一个名为I/O完成对象.NtSetIoCompletion 树立了一个I/O完成对象的属性.NtQueryIoCompletion 具体信息检索的I/O完成对象.NtRemoveIoCompletion 消除了一个I/O完成回调.NtDeleteFile 删除一个文件对象.NtDeviceIoControlFile 发送IOCTL装置的设备驱动,这是一个打开的文件对象.NtFlushBuffersFile 清除存中的文件数据到磁盘.NtFsControlFile 发送一个I/O控制IOCTL为代表的公开设备对象.通常用于文件系统有关的特别命令. NtLockFile 锁了一系列文件的同步访问.NtUnlockFile 解锁了一系列文件的同步访问.NtNotifyChangeDirectoryFile 寄存器一个线程希望得到通知时,一个目录的容发生变化. NtOpenFile 打开一个现有的文件.NtQueryAttributesFile 取得一个文件的属性.NtQueryDirectoryFile 检索目录的容.NtQueryEaFile 检索文件的扩展属性.NtSetEaFile 集的扩展属性文件.NtQueryFullAttributesFile 获得文件的全部属性.NtQueryInformationFile 检索方面的具体资料的档案.NtSetInformationFile 确定具体的资料档案.NtQueryVolumeInformationFile 检索有关特定磁盘卷.NtSetVolumeInformationFile 集资讯量.NtReadFile 读取数据文件.NtWriteFile 写入数据文件.NtQueryQuotaInformationFile 查询NTFS磁盘配额信息.NtSetQuotaInformationFile 设置NTFS磁盘配额信息.NtQuerySystemInformation 性能计数器注册表中的出口的大量信息可通过这一呼吁. NtSetSystemInformation 各种行政程序使用此功能.NtShutdownSystem 关闭与选择重新启动.NtCreateJobObject 创建一个作业对象.NtOpenJobObject 打开一个作业对象.NtQueryInformationJobObject 撷取资讯作业对象.NtAssignProcessToJobObject 指定一个进程作业对象.NtSetInformationJobObject 树立了一个作业对象的属性.NtTerminateJobObject 终止作业对象,终止其所有相关的进程.NtCreateJobSet 创建了一个集多种就业工作的对象.NTSYSAPINTSTATUSNTAPINtAcceptConnectPort(OUT PHANDLE PortHandle,IN PVOID PortIdentifier,IN PPORT_MESSAGE Message,IN BOOLEAN Accept,IN OUT PPORT_VIEW ServerView OPTIONAL,OUT PREMOTE_PORT_VIEW ClientView OPTIONAL);NTSYSAPINTSTATUSNTAPINtAccessCheck(IN PSECURITY_DESCRIPTOR SecurityDescriptor, IN HANDLE TokenHandle,IN ACCESS_MASK DesiredAccess,IN PGENERIC_MAPPING GenericMapping,OUT PPRIVILEGE_SET PrivilegeSet,IN PULONG PrivilegeSetLength,OUT PACCESS_MASK GrantedAccess,OUT PBOOLEAN AccessStatus);NTSYSAPINTSTATUSNTAPINtAccessCheckAndAuditAlarm(IN PUNICODE_STRING SubsystemName,IN PVOID HandleId,IN PUNICODE_STRING ObjectTypeName,IN PUNICODE_STRING ObjectName,IN PSECURITY_DESCRIPTOR SecurityDescriptor, IN ACCESS_MASK DesiredAccess,IN PGENERIC_MAPPING GenericMapping,IN BOOLEAN ObjectCreation,OUT PACCESS_MASK GrantedAccess,OUT PBOOLEAN AccessStatus,OUT PBOOLEAN GenerateOnClose);NTSYSAPINTSTATUSNTAPINtAccessCheckByType(IN PSECURITY_DESCRIPTOR SecurityDescriptor, IN PSID PrincipalSelfSid,IN HANDLE TokenHandle,IN ULONG DesiredAccess,IN POBJECT_TYPE_LIST ObjectTypeList,IN ULONG ObjectTypeListLength,IN PGENERIC_MAPPING GenericMapping,IN PPRIVILEGE_SET PrivilegeSet,IN PULONG PrivilegeSetLength,OUT PACCESS_MASK GrantedAccess,OUT PULONG AccessStatus);NTSYSAPINTSTATUSNTAPINtAccessCheckByTypeAndAuditAlarm(IN PUNICODE_STRING SubsystemName,IN PVOID HandleId,IN PUNICODE_STRING ObjectTypeName,IN PUNICODE_STRING ObjectName,IN PSECURITY_DESCRIPTOR SecurityDescriptor, IN PSID PrincipalSelfSid,IN ACCESS_MASK DesiredAccess,IN AUDIT_EVENT_TYPE AuditType,IN ULONG Flags,IN POBJECT_TYPE_LIST ObjectTypeList,IN ULONG ObjectTypeListLength,IN PGENERIC_MAPPING GenericMapping,IN BOOLEAN ObjectCreation,OUT PACCESS_MASK GrantedAccess,OUT PULONG AccessStatus,OUT PBOOLEAN GenerateOnClose);NTSYSAPINTSTATUSNTAPINtAccessCheckByTypeResultList(IN PSECURITY_DESCRIPTOR SecurityDescriptor, IN PSID PrincipalSelfSid,IN HANDLE TokenHandle,IN ACCESS_MASK DesiredAccess,IN POBJECT_TYPE_LIST ObjectTypeList,IN ULONG ObjectTypeListLength,IN PGENERIC_MAPPING GenericMapping,IN PPRIVILEGE_SET PrivilegeSet,IN PULONG PrivilegeSetLength,OUT PACCESS_MASK GrantedAccessList,OUT PULONG AccessStatusList);NTSYSAPINTSTATUSNTAPI NtAccessCheckByTypeResultListAndAuditAlarm( IN PUNICODE_STRING SubsystemName,IN PVOID HandleId,IN PUNICODE_STRING ObjectTypeName,IN PUNICODE_STRING ObjectName,IN PSECURITY_DESCRIPTOR SecurityDescriptor,IN PSID PrincipalSelfSid,IN ACCESS_MASK DesiredAccess,IN AUDIT_EVENT_TYPE AuditType,IN ULONG Flags,IN POBJECT_TYPE_LIST ObjectTypeList,IN ULONG ObjectTypeListLength,IN PGENERIC_MAPPING GenericMapping,IN BOOLEAN ObjectCreation,OUT PACCESS_MASK GrantedAccessList,OUT PULONG AccessStatusList,OUT PULONG GenerateOnClose);NTSYSAPINTSTATUSNTAPI NtAccessCheckByTypeResultListAndAuditAlarmByHandle( IN PUNICODE_STRING SubsystemName,IN PVOID HandleId,IN HANDLE TokenHandle,IN PUNICODE_STRING ObjectTypeName,IN PUNICODE_STRING ObjectName,IN PSECURITY_DESCRIPTOR SecurityDescriptor,IN PSID PrincipalSelfSid,IN ACCESS_MASK DesiredAccess,IN AUDIT_EVENT_TYPE AuditType,IN ULONG Flags,IN POBJECT_TYPE_LIST ObjectTypeList,IN ULONG ObjectTypeListLength,IN PGENERIC_MAPPING GenericMapping,IN BOOLEAN ObjectCreation,OUT PACCESS_MASK GrantedAccessList,OUT PULONG AccessStatusList,OUT PULONG GenerateOnClose);NTSYSAPINTSTATUSNTAPINtAddAtom(IN PWSTR String,IN ULONG StringLength,OUT PUSHORT Atom);NTSYSAPINTSTATUSNTAPINtAddBootEntry(IN PUNICODE_STRING EntryName,IN PUNICODE_STRING EntryValue);NTSYSAPINTSTATUSNTAPINtAddDriverEntry(IN PUNICODE_STRING DriverName,IN PUNICODE_STRING DriverPath);NTSYSAPINTSTATUSNTAPINtAdjustGroupsToken(IN HANDLE TokenHandle,IN BOOLEAN ResetToDefault,IN PTOKEN_GROUPS NewState,IN ULONG BufferLength,OUT PTOKEN_GROUPS PreviousState OPTIONAL, OUT PULONG ReturnLength);NTSYSAPINTSTATUSNTAPINtAdjustPrivilegesToken(IN HANDLE TokenHandle,IN BOOLEAN DisableAllPrivileges,IN PTOKEN_PRIVILEGES NewState,IN ULONG BufferLength,OUT PTOKEN_PRIVILEGES PreviousState OPTIONAL, OUT PULONG ReturnLength OPTIONAL);NTSYSAPINTSTATUSNTAPINtAlertResumeThread(IN HANDLE ThreadHandle,OUT PULONG PreviousSuspendCount OPTIONAL);NTSYSAPINTSTATUSNTAPINtAllocateLocallyUniqueId(OUT PLUID Luid);NTSYSAPINTSTATUSNTAPINtAllocateUserPhysicalPages(IN HANDLE ProcessHandle,IN PULONG NumberOfPages,OUT PULONG PageFrameNumbers);NTSYSAPINTSTATUSNTAPINtAllocateUuids(OUT PLARGE_INTEGER UuidLastTimeAllocated, OUT PULONG UuidDeltaTime,OUT PULONG UuidSequenceNumber,OUT PUCHAR UuidSeed);NTSYSAPINTSTATUSNTAPINtAllocateVirtualMemory(IN HANDLE ProcessHandle,IN OUT PVOID *BaseAddress,IN ULONG ZeroBits,IN OUT PULONG AllocationSize,IN ULONG AllocationType,IN ULONG Protect);NTSYSAPINTSTATUSNTAPINtApphelpCacheControl(IN APPHELPCACHECONTROL ApphelpCacheControl, IN PUNICODE_STRING ApphelpCacheObject);NTSYSAPINTSTATUSNTAPINtAreMappedFilesTheSame(IN PVOID Address1,IN PVOID Address2);NTSYSAPINTSTATUSNTAPINtAssignProcessToJobObject(IN HANDLE JobHandle,IN HANDLE ProcessHandle);NTSYSAPINTSTATUSNTAPINtCallbackReturn(IN PVOID Result OPTIONAL,IN ULONG ResultLength,IN NTSTATUS Status);NTSYSAPINTSTATUSNTAPI NtCancelDeviceWakeupRequest(IN HANDLE DeviceHandle);NTSYSAPINTSTATUSNTAPINtCancelIoFile(IN HANDLE FileHandle,OUT PIO_STATUS_BLOCK IoStatusBlock );NTSYSAPINTSTATUSNTAPINtCancelTimer(IN HANDLE TimerHandle,OUT PBOOLEAN PreviousState OPTIONAL );NTSYSAPINTSTATUSNTAPINtClearEvent(IN HANDLE EventHandleNTSYSAPINTSTATUSNTAPINtClose(IN HANDLE Handle);NTSYSAPINTSTATUSNTAPINtCloseObjectAuditAlarm(IN PUNICODE_STRING SubsystemName, IN PVOID HandleId,IN BOOLEAN GenerateOnClose);NTSYSAPINTSTATUSNTAPINtCompactKeys(IN ULONG Length,IN HANDLE Key);NTSYSAPINTSTATUSNTAPINtCompareTokens(IN HANDLE FirstTokenHandle,IN HANDLE SecondTokenHandle,OUT PBOOLEAN IdenticalTokens);NTSYSAPINTSTATUSNTAPINtCompleteConnectPort(IN HANDLE PortHandle);NTSYSAPINTSTATUSNTAPINtCompressKey(IN HANDLE Key);NTSYSAPINTSTATUSNtConnectPort(OUT PHANDLE PortHandle,IN PUNICODE_STRING PortName,IN PSECURITY_QUALITY_OF_SERVICE SecurityQos,IN OUT PPORT_VIEW ClientView OPTIONAL,OUT PREMOTE_PORT_VIEW ServerView OPTIONAL,OUT PULONG MaxMessageLength OPTIONAL,IN OUT PVOID ConnectInformation OPTIONAL,IN OUT PULONG ConnectInformationLength OPTIONAL );NTSYSAPINTSTATUSNTAPINtContinue(IN PCONTEXT Context,IN BOOLEAN TestAlert);NTSYSAPINTSTATUSNTAPINtCreateDebugObject(OUT PHANDLE DebugObject,IN ULONG AccessRequired,IN POBJECT_ATTRIBUTES ObjectAttributes,IN BOOLEAN KillProcessOnExit);NTSYSAPINTSTATUSNTAPINtCreateDirectoryObject(OUT PHANDLE DirectoryHandle,IN ACCESS_MASK DesiredAccess,IN POBJECT_ATTRIBUTES ObjectAttributes);NTSYSAPINTSTATUSNTAPINtCreateEvent(OUT PHANDLE EventHandle,IN ACCESS_MASK DesiredAccess,IN POBJECT_ATTRIBUTES ObjectAttributes,IN EVENT_TYPE EventType,IN BOOLEAN InitialStateNTSYSAPINTSTATUSNTAPINtCreateEventPair(OUT PHANDLE EventPairHandle,IN ACCESS_MASK DesiredAccess,IN POBJECT_ATTRIBUTES ObjectAttributes );NTSYSAPINTSTATUSNTAPINtCreateFile(OUT PHANDLE FileHandle,IN ACCESS_MASK DesiredAccess,IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PIO_STATUS_BLOCK IoStatusBlock,IN PLARGE_INTEGER AllocationSize OPTIONAL, IN ULONG FileAttributes,IN ULONG ShareAccess,IN ULONG CreateDisposition,IN ULONG CreateOptions,IN PVOID EaBuffer OPTIONAL,IN ULONG EaLength);NTSYSAPINTSTATUSNTAPINtCreateIoCompletion(OUT PHANDLE IoCompletionHandle,IN ACCESS_MASK DesiredAccess,IN POBJECT_ATTRIBUTES ObjectAttributes,IN ULONG NumberOfConcurrentThreads);NTSYSAPINTSTATUSNTAPINtCreateJobObject(OUT PHANDLE JobHandle,IN ACCESS_MASK DesiredAccess,IN POBJECT_ATTRIBUTES ObjectAttributes );NTSYSAPINTSTATUSNtCreateJobSet(IN ULONG Jobs,IN PJOB_SET_ARRAY JobSet,IN ULONG Reserved);NTSYSAPINTSTATUSNTAPINtCreateKey(OUT PHANDLE KeyHandle,IN ACCESS_MASK DesiredAccess,IN POBJECT_ATTRIBUTES ObjectAttributes, IN ULONG TitleIndex,IN PUNICODE_STRING Class OPTIONAL,IN ULONG CreateOptions,OUT PULONG Disposition OPTIONAL);NTSYSAPINTSTATUSNTAPINtCreateKeyedEvent(OUT PHANDLE KeyedEventHandle,IN ACCESS_MASK DesiredAccess,IN POBJECT_ATTRIBUTES ObjectAttributes, IN ULONG Reserved);NTSYSAPINTSTATUSNTAPINtCreateMailslotFile(OUT PHANDLE FileHandle,IN ACCESS_MASK DesiredAccess,IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PIO_STATUS_BLOCK IoStatusBlock,IN ULONG CreateOptions,IN ULONG InBufferSize,IN ULONG MaxMessageSize,IN PLARGE_INTEGER ReadTimeout OPTIONAL );NTSYSAPINTSTATUSNTAPINtCreateMutant(OUT PHANDLE MutantHandle,IN ACCESS_MASK DesiredAccess,IN POBJECT_ATTRIBUTES ObjectAttributes, IN BOOLEAN InitialOwner);NTSYSAPINTSTATUSNTAPINtCreateNamedPipeFile(OUT PHANDLE FileHandle,IN ACCESS_MASK DesiredAccess,IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PIO_STATUS_BLOCK IoStatusBlock,IN ULONG ShareAccess,IN ULONG CreateDisposition,IN ULONG CreateOptions,IN BOOLEAN TypeMessage,IN BOOLEAN ReadmodeMessage,IN BOOLEAN Nonblocking,IN ULONG MaxInstances,IN ULONG InBufferSize,IN ULONG OutBufferSize,IN PLARGE_INTEGER DefaultTimeout OPTIONAL );NTSYSAPINTSTATUSNTAPINtCreatePagingFile(IN PUNICODE_STRING FileName,IN PULARGE_INTEGER InitialSize,IN PULARGE_INTEGER MaximumSize,IN ULONG Priority OPTIONAL);NTSYSAPINTSTATUSNTAPINtCreatePort(OUT PHANDLE PortHandle,IN POBJECT_ATTRIBUTES ObjectAttributes, IN ULONG MaxConnectionInfoLength,IN ULONG MaxMessageLength,IN ULONG MaxPoolUsage);NTSYSAPINTSTATUSNTAPINtCreateProcess(OUT PHANDLE ProcessHandle,IN ACCESS_MASK DesiredAccess,IN POBJECT_ATTRIBUTES ObjectAttributes, IN HANDLE InheritFromProcessHandle,IN BOOLEAN InheritHandles,IN HANDLE SectionHandle OPTIONAL,IN HANDLE DebugPort OPTIONAL,IN HANDLE ExceptionPort OPTIONAL);NTSYSAPINTSTATUSNTAPINtCreateProcessEx(OUT PHANDLE ProcessHandle,IN ACCESS_MASK DesiredAccess,IN POBJECT_ATTRIBUTES ObjectAttributes, IN HANDLE InheritFromProcessHandle,IN ULONG CreateFlags,IN HANDLE SectionHandle OPTIONAL,IN HANDLE DebugObject OPTIONAL,IN HANDLE ExceptionPort OPTIONAL,IN ULONG JobMemberLevel);NTSYSAPINTSTATUSNTAPINtCreateProfile(OUT PHANDLE ProfileHandle,IN HANDLE ProcessHandle,IN PVOID Base,IN ULONG Size,IN ULONG BucketShift,IN PULONG Buffer,IN ULONG BufferLength,IN KPROFILE_SOURCE Source,IN ULONG ProcessorMask);NTSYSAPINTSTATUSNTAPINtCreateSection(IN ACCESS_MASK DesiredAccess,IN POBJECT_ATTRIBUTES ObjectAttributes, IN PLARGE_INTEGER SectionSize OPTIONAL, IN ULONG Protect,IN ULONG Attributes,IN HANDLE FileHandle);NTSYSAPINTSTATUSNTAPINtCreateSemaphore(OUT PHANDLE SemaphoreHandle,IN ACCESS_MASK DesiredAccess,IN POBJECT_ATTRIBUTES ObjectAttributes, IN LONG InitialCount,IN LONG MaximumCount);NTSYSAPINTSTATUSNTAPINtCreateSymbolicLinkObject(OUT PHANDLE SymbolicLinkHandle,IN ACCESS_MASK DesiredAccess,IN POBJECT_ATTRIBUTES ObjectAttributes, IN PUNICODE_STRING TargetName);NTSYSAPINTSTATUSNTAPINtCreateThread(OUT PHANDLE ThreadHandle,IN ACCESS_MASK DesiredAccess,IN POBJECT_ATTRIBUTES ObjectAttributes, IN HANDLE ProcessHandle,OUT PCLIENT_ID ClientId,IN PCONTEXT ThreadContext,IN PUSER_STACK UserStack,IN BOOLEAN CreateSuspended);NTSYSAPINTSTATUSNTAPINtCreateTimer(IN ACCESS_MASK DesiredAccess,IN POBJECT_ATTRIBUTES ObjectAttributes, IN TIMER_TYPE TimerType);NTSYSAPINTSTATUSNTAPINtCreateToken(OUT PHANDLE TokenHandle,IN ACCESS_MASK DesiredAccess,IN POBJECT_ATTRIBUTES ObjectAttributes, IN TOKEN_TYPE Type,IN PLUID AuthenticationId,IN PLARGE_INTEGER ExpirationTime,IN PTOKEN_USER User,IN PTOKEN_GROUPS Groups,IN PTOKEN_PRIVILEGES Privileges,IN PTOKEN_OWNER Owner,IN PTOKEN_PRIMARY_GROUP PrimaryGroup, IN PTOKEN_DEFAULT_DACL DefaultDacl,IN PTOKEN_SOURCE Source);NTSYSAPINTSTATUSNTAPINtCreateWaitablePort(OUT PHANDLE PortHandle,IN POBJECT_ATTRIBUTES ObjectAttributes, IN ULONG MaxConnectionInfoLength,IN ULONG MaxMessageLength,IN ULONG MaxPoolUsage);NTSYSAPINTSTATUSNTAPINtDebugActiveProcess(IN HANDLE Process,IN HANDLE DebugObject);NTSYSAPINTSTATUSNTAPINtDebugContinue(IN HANDLE DebugObject,IN PCLIENT_ID AppClientId,IN NTSTATUS ContinueStatus);NTSYSAPINTSTATUSNTAPINtDelayExecution(IN BOOLEAN Alertable,IN PLARGE_INTEGER Interval);NTSYSAPINTSTATUSNTAPINtDeleteAtom(IN USHORT Atom);NTSYSAPINTSTATUSNTAPINtDeleteBootEntry(IN PUNICODE_STRING EntryName,IN PUNICODE_STRING EntryValue);NTSYSAPINTSTATUSNTAPINtDeleteDriverEntry(IN PUNICODE_STRING DriverName,IN PUNICODE_STRING DriverPath);NTSYSAPINTSTATUSNTAPINtDeleteFile(IN POBJECT_ATTRIBUTES ObjectAttributes );NTSYSAPINTSTATUSNTAPINtDeleteKey(IN HANDLE KeyHandle);NTSYSAPINTSTATUSNTAPINtDeleteObjectAuditAlarm(IN PUNICODE_STRING SubsystemName,IN PVOID HandleId,IN BOOLEAN GenerateOnClose);NTSYSAPINTSTATUSNTAPINtDeleteValueKey(IN HANDLE KeyHandle,IN PUNICODE_STRING ValueName);NTSYSAPINTSTATUSNTAPINtDeviceIoControlFile(IN HANDLE FileHandle,IN HANDLE Event OPTIONAL,IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, IN PVOID ApcContext OPTIONAL,OUT PIO_STATUS_BLOCK IoStatusBlock,IN ULONG IoControlCode,IN PVOID InputBuffer OPTIONAL,IN ULONG InputBufferLength,OUT PVOID OutputBuffer OPTIONAL,IN ULONG OutputBufferLength);NTSYSAPINTSTATUSNTAPINtDisplayString(IN PUNICODE_STRING String);NTSYSAPINTSTATUSNTAPINtDuplicateObject(IN HANDLE SourceProcessHandle,IN HANDLE SourceHandle,IN HANDLE TargetProcessHandle,OUT PHANDLE TargetHandle OPTIONAL,IN ACCESS_MASK DesiredAccess,IN ULONG Attributes,IN ULONG Options);NTSYSAPINTSTATUSNTAPINtDuplicateToken(IN HANDLE ExistingTokenHandle,IN ACCESS_MASK DesiredAccess,IN POBJECT_ATTRIBUTES ObjectAttributes,IN BOOLEAN EffectiveOnly,IN TOKEN_TYPE TokenType,OUT PHANDLE NewTokenHandle);NTSYSAPINTSTATUSNTAPINtEnumerateBootEntries(IN ULONG Unknown1,IN ULONG Unknown2);NTSYSAPINTSTATUSNTAPINtEnumerateKey(IN HANDLE KeyHandle,IN ULONG Index,IN KEY_INFORMATION_CLASS KeyInformationClass, OUT PVOID KeyInformation,IN ULONG KeyInformationLength,OUT PULONG ResultLength);NTSYSAPINTSTATUSNTAPI NtEnumerateSystemEnvironmentValuesEx(IN ULONG Unknown1,IN ULONG Unknown2,IN ULONG Unknown3);NTSYSAPINTSTATUSNTAPINtEnumerateValueKey(IN HANDLE KeyHandle,IN ULONG Index,IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, OUT PVOID KeyValueInformation,IN ULONG KeyValueInformationLength,OUT PULONG ResultLength);NTSYSAPINTSTATUSNTAPINtExtendSection(IN HANDLE SectionHandle,IN PLARGE_INTEGER SectionSize);NTSYSAPINTSTATUSNTAPINtFilterToken(IN HANDLE ExistingTokenHandle,IN ULONG Flags,IN PTOKEN_GROUPS SidsToDisable,IN PTOKEN_PRIVILEGES PrivilegesToDelete,IN PTOKEN_GROUPS SidsToRestricted,OUT PHANDLE NewTokenHandle);NTSYSAPINTSTATUSNTAPINtFindAtom(IN PWSTR String,IN ULONG StringLength,OUT PUSHORT Atom);NTSYSAPINTSTATUSNTAPINtFlushBuffersFile(IN HANDLE FileHandle,OUT PIO_STATUS_BLOCK IoStatusBlock);NTSYSAPINTSTATUSNTAPINtFlushInstructionCache(IN HANDLE ProcessHandle,IN PVOID BaseAddress OPTIONAL,IN ULONG FlushSize);NTSYSAPINTSTATUSNTAPINtFlushKey(IN HANDLE KeyHandle);NTSYSAPINTSTATUSNTAPINtFlushVirtualMemory(IN HANDLE ProcessHandle,IN OUT PVOID *BaseAddress,IN OUT PULONG FlushSize,OUT PIO_STATUS_BLOCK IoStatusBlock );NTSYSAPINTSTATUSNTAPINtFlushWriteBuffer(VOID);NTSYSAPINTSTATUSNTAPINtYieldExecution(VOID);NTSYSAPINTSTATUSNTAPINtWriteVirtualMemory(IN HANDLE ProcessHandle,IN PVOID BaseAddress,IN PVOID Buffer,IN ULONG BufferLength,OUT PULONG ReturnLength OPTIONAL );NTSYSAPINTSTATUSNTAPINtWriteRequestData(IN HANDLE PortHandle,IN PPORT_MESSAGE Message,IN ULONG Index,IN PVOID Buffer,IN ULONG BufferLength,OUT PULONG ReturnLength OPTIONAL);NTSYSAPINTSTATUSNTAPINtWriteFileGather(IN HANDLE FileHandle,IN HANDLE Event OPTIONAL,IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, IN PVOID ApcContext OPTIONAL,OUT PIO_STATUS_BLOCK IoStatusBlock,IN PFILE_SEGMENT_ELEMENT Buffer,IN ULONG Length,IN PLARGE_INTEGER ByteOffset OPTIONAL, IN PULONG Key OPTIONAL);NTSYSAPINTSTATUSNTAPINtWriteFile(IN HANDLE FileHandle,IN HANDLE Event OPTIONAL,IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, IN PVOID ApcContext OPTIONAL,OUT PIO_STATUS_BLOCK IoStatusBlock,IN PVOID Buffer,IN ULONG Length,IN PLARGE_INTEGER ByteOffset OPTIONAL, IN PULONG Key OPTIONAL);NTSYSAPINTSTATUSNTAPINtWaitLowEventPair(IN HANDLE EventPairHandle);NTSYSAPINTSTATUSNTAPINtWaitHighEventPair(IN HANDLE EventPairHandle);NTSYSAPINTSTATUSNTAPINtWaitForSingleObject(IN HANDLE Handle,IN BOOLEAN Alertable,IN PLARGE_INTEGER Timeout OPTIONAL );NTSYSAPINTSTATUSNTAPINtWaitForMultipleObjects32(IN ULONG HandleCount,IN PHANDLE Handles,IN WAIT_TYPE WaitType,IN BOOLEAN Alertable,IN PLARGE_INTEGER Timeout OPTIONAL );NTSYSAPINTSTATUSNTAPINtWaitForMultipleObjects(IN ULONG HandleCount,IN PHANDLE Handles,IN WAIT_TYPE WaitType,IN BOOLEAN Alertable,IN PLARGE_INTEGER Timeout OPTIONAL );NTSYSAPINTSTATUSNTAPINtWaitForKeyedEvent(IN HANDLE KeyedEventHandle,IN PVOID Key,IN BOOLEAN Alertable,IN PLARGE_INTEGER Timeout OPTIONAL );NTSYSAPINTSTATUSNTAPINtWaitForDebugEvent(IN HANDLE DebugObject,IN BOOLEAN Alertable,IN PLARGE_INTEGER Timeout OPTIONAL,OUT PDBGUI_WAIT_STATE_CHANGE StateChange );NTSYSAPINTSTATUSNTAPINtVdmControl(IN VDMSERVICECLASS Service,IN OUT PVOID ServiceData);NTSYSAPINTSTATUSNTAPINtUnmapViewOfSection(IN HANDLE ProcessHandle,IN PVOID BaseAddress);NTSYSAPINTSTATUSNTAPINtUnlockVirtualMemory(IN HANDLE ProcessHandle,IN OUT PVOID *BaseAddress,IN OUT PULONG LockSize,IN ULONG LockType);NTSYSAPINTSTATUSNTAPINtUnlockFile(IN HANDLE FileHandle,OUT PIO_STATUS_BLOCK IoStatusBlock,IN PULARGE_INTEGER LockOffset,IN PULARGE_INTEGER LockLength,IN ULONG Key);NTSYSAPINTSTATUSNTAPINtUnloadKeyEx(IN POBJECT_ATTRIBUTES KeyObjectAttributes,IN HANDLE EventHandle OPTIONAL);NTSYSAPINTSTATUSNTAPINtUnloadKey2(IN POBJECT_ATTRIBUTES KeyObjectAttributes, IN BOOLEAN ForceUnload);NTSYSAPINTSTATUSNTAPINtUnloadKey(IN POBJECT_ATTRIBUTES KeyObjectAttributes );NTSYSAPINTSTATUSNTAPINtUnloadDriver(IN PUNICODE_STRING DriverServiceName);NTSYSAPINTSTATUSNTAPINtTranslateFilePath(PFILE_PATH InputFilePath,ULONG OutputType,PFILE_PATH OutputFilePath,ULONG OutputFilePathLength);NTSYSAPINTSTATUSNTAPINtTraceEvent(IN ULONG TraceHandle,IN ULONG Flags,IN ULONG TraceHeaderLength,IN PEVENT_TRACE_HEADER TraceHeader);NTSYSAPINTSTATUSNTAPINtTerminateThread(IN HANDLE ThreadHandle OPTIONAL,。