头文件:
//
// svcdesctbl.h
//
#pragma once
typedef struct _KSERVICE_TABLE_DESCRIPTOR {
PULONG_PTR Base; // Service Table Base
PULONG Count; // Service Counter Table Base, Used only in checked build
ULONG Limit;
PUCHAR Number;
} KSERVICE_TABLE_DESCRIPTOR, *PKSERVICE_TABLE_DESCRIPTOR;
#define NUMBER_SERVICE_TABLES 2
__declspec(dllimport) KSERVICE_TABLE_DESCRIPTOR
KeServiceDescriptorTable[NUMBER_SERVICE_TABLES];
KSERVICE_TABLE_DESCRIPTOR * Get_KeServiceDescriptorTableShadow ();
阅读全文…
内核编程
KeServiceDescriptorTable, KeServiceDescriptorTableShadow, 内核
先看 IoGetDeviceObjectPointer() 的内部实现:
- 用 ZwOpenFile() 打开设备文件的 handle
- 用 ObReferenceObjectByHandle() 来得到 file object
- 用 IoGetRelatedDeviceObject() 来得到 device object
- 用 ZwClose() 来关闭这个 handle
WRK 1.2 源代码如下:
阅读全文…
内核编程, 技术心得
IoGetDeviceObjectPointer, 内核
testsys.def
;testsys.def : Declares the module parameters for the DLL.
; LIBRARY "testsys"
EXPORTS
; Explicit exports can go here
SDK_ExportFunction1 @1
SDK_ExportFunction2 @2
testsys.h
#ifndef _TESTSYS_H
#define _TESTSYS_H 1
extern void NTAPI SDK_ExportFunction1(ULONG nIndex) ;
extern void NTAPI SDK_ExportFunction2();
#endif
testsys.c
#include <ntddk.h>
#include "testsys.h"
void NTAPI SDK_ExportFunction1(ULONG nIndex)
{
return ;
}
void NTAPI SDK_ExportFunction2()
{
return ;
}
#pragma code_seg("INIT")
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)
{
return STATUS_SUCCESS ;
}
#pragma code_seg()
阅读全文…
内核编程
内核, 函数, 导出, 驱动
网上收集的关于用汇编语言编写 Windows 环境下的 KMD 驱动程序的教程, 由俄国人编写, 由罗云彬, 松松, 董岩翻译, 感谢所有这些人的辛勤劳动, 俺将这些散落在网络上的文章收集整理出来, 我想这些教程不止对使用汇编语言的人有帮助.
教程中文版的下载地址是 这里 KmdTutCn
附录:
选择那个汇编编译器, 如何编译 16 位 dos 和 32 位汇编程序
首先进入 masm32\bin目录,在dos下键入如下命令, 将分别编译 16 位和 32 位程序
- 如果是16位dos汇编代码
ml /Zm /c demo.asm
link16 demo.obj
- 如果是32位汇编代码
ml /c /coff /I c:\masm32\include test.asm
link /subsystem:windows test.obj
内核编程, 日常琐碎
16位, ASM, KMD, 内核, 驱动
近期评论