Windows内核安全编程实践之路 安于此生@看雪学院
自我介绍 安于此生@ExpLife,现任高级逆向工程师。 主要从事windows驱动开发及逆向方面的工作,擅长C/C++,ASM, 软件调试逆向,恶意代码分析与对抗。 主页:https://github.com/ExpLife0011 https://github.com/ExpLife0011/awesome-windows-kernel-security-development
UNREFERENCED_PARAMETER宏的运用 初识UNICODE_STRING结构 探究驱动程序入口函数的两个参数 本课内容 UNREFERENCED_PARAMETER宏的运用 初识UNICODE_STRING结构 探究驱动程序入口函数的两个参数
在编写驱动的时候,如果有函数的参数在函数体内未引用, 并且将警告视为错误的编译选项启用了的话,这时驱动程序 UNREFERENCED_PARAMETER宏的运用 在编写驱动的时候,如果有函数的参数在函数体内未引用, 并且将警告视为错误的编译选项启用了的话,这时驱动程序 编译会报错,并提示程序中存在未引用的变量.这个时候我 们只需要使用UNREFERENCED_PARAMETER来描述未引 用到的参数就可以消除该警告
初识UNICODE_STRING结构 typedef struct _UNICODE_STRING { USHORT Length; USHORT MaximumLength; PWSTR Buffer; } UNICODE_STRING, *PUNICODE_STRING; Length:存储在缓冲区中的字符串所占的字节数 MaxinumLength:缓冲区能够容纳的字节数 Buffer:指向了用于包含一个宽字符字符串的缓冲区
探究驱动程序入口函数的两个参数 入口函数的第一个参数PDRIVER_OBJECT DriverObject typedef struct _DRIVER_OBJECT { CSHORT Type; //驱动程序的类型 CSHORT Size; //驱动对象结构体的大小 PDEVICE_OBJECT DeviceObject; //指向驱动程序创建的设备对象,这些设备对象构成一个链表 ULONG Flags; //驱动程序标志 PVOID DriverStart; //驱动程序映像的起始地址 ULONG DriverSize; //驱动程序映像的大小 PVOID DriverSection; //指向驱动程序映像的内存区对象,可以通过该成员遍历系统中所有的驱动模块 PDRIVER_EXTENSION DriverExtension; //指向驱动程序对象的扩展结构 UNICODE_STRING DriverName; //驱动的名称 PUNICODE_STRING HardwareDatabase; //设备的硬件数据库名,一般为HKEY_LOCAL_MACHINE\Hardware\DESCRIPTION\System PFAST_IO_DISPATCH FastIoDispatch; //指向文件系统以及网络传输驱动会用到的派遣函数的指针表 PDRIVER_INITIALIZE DriverInit; //指向DriverEntry函数,这是IO管理器设置的 PDRIVER_STARTIO DriverStartIo; //记录StartIO例程的函数地址,用于串行化操作. PDRIVER_UNLOAD DriverUnload; //指向驱动卸载时所用的回调函数地址 PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION + 1]; //指向驱动程序的派遣函数地址表 } DRIVER_OBJECT,*PDRIVER_OBJECT;
探究驱动程序入口函数的两个参数 入口函数的第二个参数PUNICODE_STRING RegistryPath 指向代表该驱动程序注册表键路径的UNICODE_STRING结构