//应用程序例子
#include <iostream>
#include<Windows.h>
#define CW_DEV_SYM L"\\\\.\\slbkcdo_3948d33e"
int main() {HANDLE device = NULL;device = CreateFile(CW_DEV_SYM,GENERIC_READ|GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_SYSTEM,0);if (device==INVALID_HANDLE_VALUE) {printf("coworker demo:Open device failed.\r\n");return -1;}else {printf("coworker demo: Open device successfully. \r\n");}CloseHandle(device);
}
//内核驱动例子
#include<ntddk.h>
#include<ntstrsafe.h>
//提供一个Unload函数只是为了让这个程序能动态卸载
VOID DriverUnload(PDRIVER_OBJECT driver) {DbgPrint("first:Our driver is unloading...\r\n");}
#define CWK_CDO_SYB_NAME L"\\??\\slbkcdo_3948d33e"
PDEVICE_OBJECT g_co = { 0 };//全局设备对象指针
const GUID  guid =
{ 0x8a32b368, 0x3249, 0x12e1, {0x92,0x16, 0x46, 0x1a, 0x21, 0x30, 0x29, 0x06} };
NTSTATUS InitDeviceAndSymbolic(IN PDRIVER_OBJECT driver) {UNICODE_STRING cdo_name = RTL_CONSTANT_STRING(L"\\Device\\cwk_3948d33e");NTSTATUS status = NULL;NTSTATUS driverStatus = NULL;UNICODE_STRING cdo_syb = RTL_CONSTANT_STRING(CWK_CDO_SYB_NAME);//生成符号链接IoDeleteSymbolicLink(&cdo_syb);//可能有同名的符号链接因此先删除driverStatus = IoCreateDevice(driver, 0, &cdo_name, FILE_DEVICE_UNKNOWN, FILE_DEVICE_SECURE_OPEN, FALSE, &g_co);//创建设备对象status = IoCreateSymbolicLink(&cdo_syb, &cdo_name);if (!NT_SUCCESS(status)) {//如果设备删除设备对象//IoDeleteDevice(g_co);return status;}else {DbgPrint("成功");}
}NTSTATUS cwkDispatch(IN PDEVICE_OBJECT dev,IN PIRP irp) {ULONG_PTR ret_len=sizeof(ULONG_PTR);PIO_STACK_LOCATION irpsp = IoGetCurrentIrpStackLocation(irp);//请求当前栈空间,栈空间结构是适用于内核的设备对象栈结构
#if DBG__asm int 3
#endif // DBGif (dev == g_co) {if (irpsp->MajorFunction == IRP_MJ_CREATE || irpsp->MajorFunction == IRP_MJ_CLOSE) {DbgPrint("IRP_MJ_CREATE||IRP_MJ_CLOSE STATUS=TURE");//返回输出提供了一个接受请求的缓冲区Information用来返回到底使用了多少输出空间irp->IoStatus.Information = ret_len;//返回状态irp->IoStatus.Status = STATUS_SUCCESS;//结束请求IoCompleteRequest(irp,IO_NO_INCREMENT);return STATUS_SUCCESS;}if (irpsp->MajorFunction==IRP_MJ_DEVICE_CONTROL) {DbgPrint("IRP_MJ_DEVICE_CONTROL STATUS=TRUE");//返回输出提供了一个接受请求的缓冲区Information用来返回到底使用了多少输出空间irp->IoStatus.Information = ret_len;//返回状态irp->IoStatus.Status = STATUS_SUCCESS;//结束请求IoCompleteRequest(irp, IO_NO_INCREMENT);return STATUS_SUCCESS;}}IoCompleteRequest(irp, IO_NO_INCREMENT);return STATUS_SUCCESS;
}
NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path) {ULONG i;DbgPrint("内核通信测试DEMO");InitDeviceAndSymbolic(driver);for (i = 0; i < IRP_MJ_MAXIMUM_FUNCTION; i++) {driver->MajorFunction[i] = cwkDispatch;}driver->DriverUnload = DriverUnload;return STATUS_SUCCESS;
}
//DbgPrint("当前KernelModule中断级别:%d.\r\n",kil);
//设置一个卸载函数,便于这个函数退出

Windows应用程序控制内核简单例子(通讯)相关推荐

  1. python windows 消息通讯_在windows下使用python进行串口通讯的方法

    在windows下使用python进行串口通讯的方法 Windows版本下的python并没有内置串口通讯的pyserial的库,所以需要自己下载.参照了网上的教程,有许多用的pip的安装方式,但是试 ...

  2. Flutter 初学者的简单例子充分解释

    Flutter 初学者的简单例子充分解释 大家好,我是坚果,我的公众号"坚果前端", 关于 Flutter 语言: Flutter 是一种语言工具,允许您使用单一的原生编程语言代码 ...

  3. AgileEAS.NET SOA 中间件平台.Net Socket通信框架-简单例子-实现简单的服务端客户端消息应答...

    一.AgileEAS.NET SOA中间件Socket/Tcp框架介绍 在文章AgileEAS.NET SOA 中间件平台Socket/Tcp通信框架介绍一文之中我们对AgileEAS.NET SOA ...

  4. VC API常用函数简单例子大全(1-89)

    第一个:FindWindow根据窗口类名或窗口标题名来获得窗口的句柄,该函数返回窗口的句柄 函数的定义:HWND WINAPI FindWindow(LPCSTR lpClassName ,LPCST ...

  5. 【操作系统】Linux内核和Windows系统的内核有什么区别?

    本文内容转载自"拉勾教育"的讲义,更多课程信息请关注拉勾教育.本人在学习之余记记笔记,顺便当当搬运工! 目录 Linux内核和Windows系统的内核有什么区别? 什么是内核? 内 ...

  6. 基于树莓派对Linux内核简单认识

    基于树莓派对Linux内核简单认识 树莓派等芯片带操作系统的启动过程 Linux 内核源码 Linux 内核源码目录树 安装tree命令 目录树结构 Linux根目录下 \ 树莓派Linux源码配置 ...

  7. php病毒源代码,HTML_vbs病毒的简单例子源代码解析,说明:作者对某些代码进行了 - phpStudy...

    vbs病毒的简单例子源代码解析 说明:作者对某些代码进行了修改.该文件是一个完整的程序.该文件执行之后,会寻找硬盘上所有满足条件的文件,对其进行强制性覆盖(满足条件的文件数据将全部丢失).并再创建一个 ...

  8. Windows套接字(Socket)例子(源码,实例)

    最简单的Windows套接字(Socket)例子(源码,实例) 佟强(http://blog.csdn.net/microtong) 2008年11月21日 Server.exe PortNumber ...

  9. Jython的安装及简单例子

    Python是用C编写的高级的.面向对象的.开放源代码的编程语言.所以又叫CPython. Jython是一种完整的语言,而不是一个Java翻译器或仅仅是一个Python编译器,它是一个Python语 ...

最新文章

  1. Go语言 channel
  2. 在Windows上同步SVN代码库到备份SVN机器上
  3. 云拨测助力节卡机器人,全面优化海外网站性能
  4. c语言中time相关函数
  5. 权限丢失_不要让任何“账户权限”问题困扰你!
  6. 假期要如何过才有意义
  7. java导入shp数据并解析
  8. 算法精解 c语言 源码,算法精解七(C语言版)
  9. python网易云付费歌曲下载_python 根据网易云歌曲的ID 直接下载歌曲的实例
  10. php mysql知识总结_Mysql数据库知识总结(看资料总结出来的)
  11. Mybatis注解用法
  12. 约瑟夫环数学问题——举一反三、触类旁通
  13. 三国志战略版:求贤之我要换啥
  14. vue3 解决getCurrentInstance 打包后线上环境报错问题
  15. appbase_实时图形数据库即服务与Appbase
  16. JavaScript根据开始时间和结束时间计算具体礼拜几
  17. 汇编语言-int指令
  18. 多线程系列学习:ABA问题
  19. matlab绘制抛物线,MATLAB中绘制抛物线的图像,请补充完成下面代码: clc,clear; x=linspace(...
  20. 传统算法与神经网络算法,最简单的神经网络算法

热门文章

  1. 2019 CNCF的中国云原生调查报告
  2. vue手机登录页及短信验证
  3. sql正则提取固定内容
  4. matlab里toimage函数_MATLAB图像处理函数大全
  5. 给网赚从业者的几点建议
  6. 验证码测试的解决方案
  7. 开放原子读书会第4期:物联网核心技术漫谈——万物数字化的利器
  8. Unity HDRP云渲染锯齿、UI拖影、字体清晰度问题
  9. Asp.net 处理程序(第五篇)
  10. 一日一技 | 利用油猴插件自定义网页显示字体