It's interesting to work with the subsystem. Recently I discovered a bug of CPL(Control Panel) in reactos. The original one didn't send SPI to subsystem, and also the way of sending is incorrect. How do we get system parameter set and sent to the kernel space and also updated in registry? It itself is complicated problem. While my understanding is , CPL itself a dll calls SystemParametersInfo, and this API is in user32.dll, the API is implemented in the user32\misc\desktop.c we get two versions there SystemParametersInfoA and SystemParametersInfoW dealing with different encoding as other APIs do. And this API establishes a call to NtUserSystemParametersInfo which switch to the kernel mode. And the kernel mode subsystem would deal with the DATA sent from CPL. At last we understand the calling chain clear. Inside the subsystem , the core func calls UserSystemParametersInfo internally. After some protection check in kernel mode being done , the kernel func calls IntSystemParametersInfo. This at last deal with the data we sent. There are two ways of sending data to this func.
c 代码
- ULONG FASTCALL IntSystemParametersInfo( UINT uiAction, UINT uiParam, PVOID pvParam, UINT fWinIni)
As we can see there are uiAction which stands for our action, uiParam & pvParam represents different data sent. When we are sending some int like builtin small data we use the 2nd arg uiParam, while if we want to pass more we need pvParam. And obviously pvParam points to area of user space. So it's already get probed correct in order to not result KeBugCheck. That's how our Control Panel works. And at last I developed the software mouse acceleration for Reactos. It's also in subsystem. Subsystem is really a funny place to play with. And I hope someday POSIX subsystem gets done, and running linux binaries in Reactos. Maybe coLinux uses the similar implementation as a subsystem
分享到:
相关推荐
解决 Win7 电脑弹出 16 bit MS-DOS Subsystem 的问题 Win7 电脑一直弹出 16 bit MS-DOS Subsystem 的问题是非常常见的,很多用户都遇到过这种情况。这个问题的出现可能是由于系统设置或者恶意软件的影响所致。下面...
早期的Windows NT操作系统支持两种类型的驱动程序:**NT式驱动**和**WDM(Windows Driver Model)驱动**。本文主要介绍如何使用Visual C++ 6.0(简称VC6.0)编译这两种类型的驱动程序,并特别关注于DDK(Driver ...
这可能涉及到Linux内核的帧缓冲子系统(Framebuffer Subsystem)、中断处理、I2C或SPI通信协议,以及Linux驱动模型中的设备树(Device Tree)配置。 标签中的关键词提供了更多线索:"change"、"novatek"、"nt68665...
- **NT式驱动**:这是早期Windows NT内核的驱动模型。 - **WDM式驱动**:即Windows Driver Model,是Windows 2000及以后版本所采用的驱动模型。 通过以上步骤,开发者可以在VC6环境下成功配置并编译出驱动程序。...
WORD Subsystem; // 子系统 WORD DllCharacteristics; // DLL 特征 DWORD SizeOfStackReserve; // 栈保留大小 DWORD SizeOfStackCommit; // 栈提交大小 DWORD SizeOfHeapReserve; // 堆保留大小 DWORD ...
#pragma comment(linker, "/subsystem:\"windows\"/entry:\"mainCRTStartup\"") using namespace std; int main() { HKEY hKey; // 打开 HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\...
命令行格式可能是`link /SUBSYSTEM:DOS /OUT:output.exe source.obj`,这将生成名为output.exe的DOS可执行文件。 4. **调试与运行**:如果在安装过程中包含了调试工具,如DEBUG.EXE,可以用来调试汇编程序。在DOS...
- **系统(System)**:子系统设置为“控制台”(`/SUBSYSTEM:CONSOLE)`,堆栈保留大小为4194304,堆栈提交大小为4096。 - **驱动程序**:设置为“驱动程序”(`/DRIVER)`。 - **高级**:入口点为`DriverEntry`,取消...
Link /SUBSYSTEM:WINDOWS clock.obj ``` 这些命令分别负责编译源代码和链接对象文件,生成可执行文件。 通过本文的介绍,你不仅了解了Win32汇编语言的基础知识,还掌握了如何使用常见的工具链来开发和构建Win32...
- **子系统:** 设置为“Native (/SUBSYSTEM:NATIVE)”以适应驱动程序的需求。 - **驱动类型:** 设置为“Driver (/DRIVER)”以明确指出这是个驱动程序。 - **入口点:** 设置为`DriverEntry`以指定驱动程序的入口...
"csrss.exe"(Client/Server Runtime Server Subsystem)是Windows NT4/2000/XP/2003中的关键进程,它负责控制图形用户界面的相关子系统,如窗口、任务栏和开始菜单。此进程在系统启动时自动运行,任何与图形界面...
- Objects Threads - NT unit of CPU scheduling Processes - NT virtual address space container Sections - NT sharable memory objects Exception port - NT mechanism for subsystem ...
随着Windows NT的推出以及后续版本的发展,Win32 API逐渐成为主流。本文将围绕Win32 API进行详细介绍,希望能帮助那些希望深入了解Windows编程的开发者。 #### 二、Win32窗口程序与编译环境 ##### 2.1 开发与编译...
- **Windows NT驱动编程**:`gcc -shared -Wl,--subsystem,native -Wl,--entry,_DriverEntry@8 -nostartfiles -nostdlib ntdriver.c -ontdriver.sys -lntoskrnl` - **驱动加载/卸载脚本**:可以使用脚本进行NT驱动的...
NTLDR(NT Loader)是 Windows 操作系统的加载程序,负责加载操作系统核心和初始化系统服务。WinLoad 是 Windows Vista 及更高版本的加载程序,取代了 NTLDR。 SMSS.EXE 和 CSRSS.EXE SMSS.EXE(Session Manager ...
本资料将详细解析Windows NT引导过程,旨在帮助读者理解这一复杂而至关重要的系统流程。 首先,我们要明白引导过程的起点。在计算机加电后,BIOS(基本输入输出系统)执行POST(Power-On Self Test)进行硬件自检,...
它包含了关于PE文件的更多细节,如 subsystem(如Windows GUI或console)、DLL特性、入口点地址、内存模型等。 4. **节表**:节是PE文件的基本组织单元,存储了代码、数据和各种元数据。常见的节有.text(代码)、....
如果是Windows系统,引导加载器可能是NTLDR(NT Loader,用于NT系统)或WinLoad(Vista及后续系统)。引导加载器的作用是解析Boot.ini文件(在NTLDR的情况下)或Bcdedit配置(在WinLoad的情况下),根据用户选择或...