随笔分类 - windows内核编程
摘要:RtlInitUnicodeString void RtlInitUnicodeString( [in, out] PUNICODE_STRING DestinationString, [in, optional] PCWSTR SourceString ); 使用此函数可以利用一个宽字符串初始化一
阅读全文
摘要:应用层与应用层之间进行同步 我们可以利用EVENT事件内核对象进行同步。 //通过创建命名的事件内核对象(名称前会默认加"Local\\") //Process1 HANDLE hEvent = CreateEvent(NULL, FALSE, FALSE, TEXT("EventName"));
阅读全文
摘要:kernel32!OpenFile与ntdll!NtOpenFile kernel32!OpenFile并不是直接调用的ntdll!NtOpenFile,其调用的是ntdll!NtCreateFile。 ntdll!NtOpenFile ntdll!NtOpenFile函数并没有声明,如果要调用的话
阅读全文
摘要:内核句柄和用户句柄 内核句柄的值有KERNEL_HANDLE_MASK标识(小于0),用户句柄的值没有KERNEL_HANDLE_MASK(大于0)。 ObReferenceObjectByHandle 当句柄值不含有KERNEL_HANDLE_MASK标志时(用户句柄) 当句柄值为-1或-2时 当
阅读全文
摘要:x86 SSDT Hook 32位下进行SSDT Hook比较简单,通过修改SSDT表中需要hook的系统服务为自己的函数,在自己的函数中进行过滤判断达到hook的目的。 获取KeServiceDescriptorTable基地址 要想进行ssdt hook,首先需要获得SSDT表的基地址。 因为K
阅读全文
摘要:内核调用用户 正常的系统调用过程为Ring3->Ring0->Ring3,而KeUserModeCallback提供了一种Ring0->Ring3->Ring0的方式,即从内核去用户层执行代码。 KeUserModeCallback ( IN ULONG ApiNumber, //对应函数在Kern
阅读全文
摘要:windows操作系统初始化 windows操作系统再初始化的过程中,当内核完全初始化而且各个组件也已经准备好后会加载一个个用户进程smss.exe(会话管理器),此进程会接着调用NtSetSystemInformation并传入SystemRegistryAppendStringInformati
阅读全文
摘要:在内核中通过调用此函数来枚举windows系统中已经加载的内核模块。 NTSTATUS ZwQuerySystemInformation ( SYSTEM_INFORMATION_CLASS SystemInformationClass, PVOID SystemInformation, ULONG
阅读全文