内核编程笔记

1,字符串操作
UNICODE_STRING //UNICODE_STRING结构体
ANSII_STRING
RTL_CONSTANT_STRING(); //UNICODE_STRING初始化
RtlCopyUnicodeString() //UNICODE_STRING复制
RtlxxxUnicodeString(); //UNICODE_STRING操作
NTSTATUS; //返回值
LARGE_INTEGER; //64位的数据


2,内存分配和销毁
ExAllocatePoolWithTag(); //
ExFreePool();


3,双向链表结构
typedef struct 
{
LIST_ENTRY list_entry;//链表头指针
PFILE_OBJECT file_object;
UNICODE_STRING file_name;
LARGE_INTEGER file_length;
}MY_fILE_INFOR;
InitializeListHead(); //初始化链表头
InsertHeadList(); //插入节点
ExInterlockedInsertHeadList(); //加锁后插入节点
ExInterlockedRemoveHeadList(); //加锁后删除节点


4,多线程安全,在内核驱动开发中必须考虑
自旋锁
KSPIN_LOCK //内存分配在全局区域或者静态区域
KIRQL //中断级
KeInitializeSpinLock(); //初始化锁
KeAcquireSpinLock(); //加锁
KeReleaseSpinLock(); //解锁


5,文件操作
OBJECT_ATTRIBUTES
InitializeObjectAttributes(); //初始化一个对象
ZwCreateFile(); //打开文件
ZwClose(); //关闭文件
ZwReadFile(); //文件读取
ZwWriteFile(); //文件写入
内核句柄在各进程之间通用.


6,注册表操作
ZwOpenKey(); //打开注册表
ZWQueryValueKEx(); //注册表值的读取
ZwSetValueKey(); //注册表值的写入


7,系统时间
KeQueryTickCount(); //获取系统“滴答”数
KeQueryTimeIncrement(); //获取一个“滴答”的具体100纳米数
KeQuerySystemTime(); //得到格林威治时间
ExSystemTimeToLocalTime(); //得到当前时间
RtlTimeToTimeFields(); //转换为TIME_FIELDS格式的时间
TIME_FIELDS //结构体


8,使用定时器
KeSetTimer(); //设置定时器,循环需要再次调用
PKTIMER; //
KeInitializeTimer(); //初始化一个TIMER
PKDPC; //
KeInitializeDpc(); //初始化一个回调结构


9,线程
PsCreateSystemThread(); //创建线程
PsTerminateSystemThread(); //终结线程,在线程中手动
ZwClose();//关闭句柄 注意:关闭句柄并不结束线程.


10,同步事件
KEVENT; //
KeInitializeEvent(); //参数2:SynchronizationEvent自动重设; NotificationEvent手动 重设.
//参数3: 初始化状态 FALSE未设定; TRUE已设定.
KeSetEvent(); //设置事件
KeResetEvent(); //手动重设
KeWaitForSingleObject();//等待函数


11,驱动设备
DEVICE_OBJECT;
DriverEntry(PDRIVER_OBJECT do,PUNICODE_STRING s) //驱动的入口函数
IRP_MJ_MAXIMUM_FUNCTION; //分发函数的个数
DriverObject->MajorFunctions //分发函数
DriverObject->DriverUnload //没有返回值
MyDispatchFunction(PDEVICE_OBJECT device, PIRP irp);
IoCreateDevice(); //创建设备对象
IoCreateDeviceSecure(); //创建设备对象,适用于所有的用户,需要链接库wdmsec.lib
IoDeleteDevice(); //删除设备对象
IoCreateSymbolicLink(); //创建符号链接,"\\\\.\\name" 符号链接名表示
device->Flags &= ~DO_DEVICE_INITIALIZING; //设备生成后打开初始化完成标志
IoIsWdmVersionAvailable(1, 0x10); //是否支持符号链接用户相关性的操作系统


12,请求处理 IRP
//打开请求
//关闭请求
//发送消息
//接受消息

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值