阅读:2003回复:7
请问-windows系统服务号在什么地方定义的?
我想了解一下windows提供的服务都是那些函数在实际执行任务的?
例如:NtCreateFile就是一个系统服务,操作系统应该是根据一个中断号来确定应该调用哪个函数提供服务,不知道对不对? |
|
沙发#
发布于:2004-12-13 14:58
反了。应该是系统函数调用中断。
中间有好几层封装。 |
|
|
板凳#
发布于:2004-12-13 15:12
兄弟最近才学,对这部分很是生疏。
如果用户执行系统调用需要内核提供的相关功能,比如说创建一个文件,则需要利用INT 2E中断进入内核模式,而这个中断对应一个中断服务程序。在这个程序当中,会根据用户请求的具体服务(对应一个服务号)调用相关的服务函数。 不知道上述的流程对不对呢? |
|
地板#
发布于:2004-12-16 15:25
win98下是这样的,不知道win2k以后的是怎么做的,应该没有这么简单..
|
|
地下室#
发布于:2004-12-17 10:51
我现在已经基本搞清楚这个过程了:
例如readfile吧,实际上在kernel32.dll中定义,调用了更底层的ntdll.dll的NtReadFile,这个函数只是一个接口,通过INT 2E中断切入内核模式,由中断调度函数KiSystemService根据NtReadFile在KeSystemDescriptorTable中的服务号(ServiceID:0xA1)调用Ntoskrnl.exe中的真正的服务函数NtReadFile,在创建一个IRP包调用文件系统驱动程序执行底层文件读写操作。 |
|
5楼#
发布于:2004-12-17 19:34
不错不错!赞一个!!
|
|
6楼#
发布于:2005-02-05 17:45
good
|
|
|
7楼#
发布于:2005-02-07 11:59
哈哈,问题没解决吗?只有反汇编才知道的,各个操作系统版本不一样顺序还不同,比如NtReadFile在KeSystemDescriptorTable中的服务号为0xA1,没有公开的方法获得
|
|
|