日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

EXE和SYS通信(ReadFile WriteFile) 其他方式

發(fā)布時(shí)間:2024/4/11 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 EXE和SYS通信(ReadFile WriteFile) 其他方式 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

EXE部分

[cpp]?view plaincopy
  • #include?<stdio.h>??
  • #include?<Windows.h>??
  • ??
  • int?main?(void)??
  • {??
  • ????char?linkname[]="\\\\.\\HelloDDK";??
  • ????HANDLE?hDevice?=?CreateFileA(linkname,GENERIC_READ?|?GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);??
  • ????if?(hDevice?==?INVALID_HANDLE_VALUE)??
  • ????{??
  • ????????printf("Win32?error?code:?%d\n",GetLastError());??
  • ????????return?1;??
  • ????}??
  • ??
  • ????UCHAR?buffer[10]={0};??
  • ????ULONG?ulRead=0;??
  • ????if?(ReadFile(hDevice,buffer,10,&ulRead,NULL))??
  • ????{??
  • ????????printf("Read?%d?bytes:",ulRead);??
  • ????????for?(int?i=0;i<(int)ulRead;i++)??
  • ????????{??
  • ????????????printf("%02X?",buffer[i]);??
  • ????????}??
  • ????????printf("\n");??
  • ????}??
  • ????getchar();??
  • ????getchar();??
  • ??
  • ????ulRead=0;??
  • ????if?(WriteFile(hDevice,buffer,10,&ulRead,NULL))??
  • ????{??
  • ????????printf("write?%d?bytes\n",ulRead);??
  • ????????for?(int?i=0;i<(int)ulRead;i++)??
  • ????????{??
  • ????????????printf("%02X?",buffer[i]);??
  • ????????}??
  • ????????printf("\n");??
  • ????}??
  • ??
  • ????CloseHandle(hDevice);??
  • ??
  • ????getchar();??
  • ????getchar();??
  • ????return?0;??
  • }??

  • ?

    ?

    SYS部分

    [cpp]?view plaincopy
  • #pragma?once??
  • ??
  • #include?<ntddk.h>??
  • #define?CountArray(Array)??(????sizeof(Array)???/???sizeof(Array[0])????)??
  • ??
  • #define?MAX_FILE_LENGTH?1024??
  • ??
  • typedef?struct?_DEVICE_EXTENSION??
  • {??
  • ????PDEVICE_OBJECT?pDevice;?????????????????????????????????????//設(shè)備對(duì)象??
  • ????UNICODE_STRING?ustrDeviceName;??????????????????//設(shè)備名稱??
  • ????UNICODE_STRING?ustrSymLinkName;?????????????????//符號(hào)名稱??
  • ??
  • ????PUCHAR??????buffer;?????????????????????????????????????????????????//緩沖區(qū)指針??
  • ????ULONG???????file_length;????????????????????????????????????????????//緩沖區(qū)長(zhǎng)度??
  • }DEVICE_EXTENSION,*PDEVICE_EXTENSION;??
  • ??
  • ??
  • ??
  • #ifdef?__cplusplus??
  • extern?"C"?NTSTATUS?DriverEntry(IN?PDRIVER_OBJECT?DriverObject,?IN?PUNICODE_STRING??RegistryPath);??
  • #endif??
  • ??
  • void?HelloUnload(IN?PDRIVER_OBJECT?DriverObject);???????????????????????????????????????????????????????//卸載函數(shù)??
  • NTSTATUS?CreateDevice(PDRIVER_OBJECT?PDevObj);??????????????????????????????????????????????????//創(chuàng)建設(shè)備??
  • NTSTATUS?HelloDDKDispatchRoutine(IN?PDEVICE_OBJECT?pDevObj,IN?PIRP?pIrp);???//派遣函數(shù)??
  • NTSTATUS?HelloDDKRead(IN?PDEVICE_OBJECT?pDevObj,IN?PIRP?pIrP);??????????????????????//讀請(qǐng)求派遣函數(shù)??
  • NTSTATUS?HelloDDKWrite(IN?PDEVICE_OBJECT?pDevObj,IN?PIRP?pIrP);?????????????????????//寫(xiě)請(qǐng)求派遣函數(shù)??

  • ?

    [cpp]?view plaincopy
  • #include?"hello.h"??
  • ??
  • NTSTATUS?DriverEntry(IN?PDRIVER_OBJECT?DriverObject,?IN?PUNICODE_STRING??RegistryPath)??
  • {??
  • ????????DbgPrint("Hello?from!\n");??
  • ????????DriverObject->DriverUnload?=?HelloUnload;??
  • ????????for?(int?i=0;i<IRP_MJ_MAXIMUM_FUNCTION;i++)??
  • ????????{??
  • ????????????DriverObject->MajorFunction[i]=HelloDDKDispatchRoutine;??
  • ????????}??
  • ????????DriverObject->MajorFunction[IRP_MJ_READ]=HelloDDKRead;???????????//設(shè)置讀派遣函數(shù)??
  • ????????DriverObject->MajorFunction[IRP_MJ_WRITE]=HelloDDKWrite;?????//設(shè)置寫(xiě)派遣函數(shù)??
  • ??
  • ??
  • //#if?DBG??
  • //??????_asm?int?3??
  • //#endif??
  • ????????//創(chuàng)建設(shè)備??
  • ????????CreateDevice(DriverObject);??
  • ??
  • ????????return?STATUS_SUCCESS;??
  • }??
  • ??
  • //讀派遣函數(shù)??
  • NTSTATUS?HelloDDKRead(IN?PDEVICE_OBJECT?pDevObj,IN?PIRP?pIrP)??
  • {??
  • //#if?DBG??
  • //??_asm?int?3??
  • //#endif??
  • ????PDEVICE_EXTENSION?pDevExt=(PDEVICE_EXTENSION)pDevObj->DeviceExtension;??
  • ????NTSTATUS?status=STATUS_SUCCESS;??
  • ??
  • ????PIO_STACK_LOCATION?stack=IoGetCurrentIrpStackLocation(pIrP);????????????????????????????//獲取當(dāng)前堆棧??
  • ????ULONG?ulReadLength=stack->Parameters.Read.Length;????????????????????????????????????????????//獲取讀的長(zhǎng)度??
  • ????ULONG?ulReadOffset=(ULONG)stack->Parameters.Read.ByteOffset.QuadPart;????//獲取讀的偏移??
  • ????PVOID?user_address=pIrP->UserBuffer;?????????????????????????????????????????????????????????????????????????//獲取用戶模式地址??
  • ??
  • ????if?(user_address==NULL)??
  • ????{??
  • ????????ASSERT(FALSE);??
  • ????????//完成IRP??
  • ????????pIrP->IoStatus.Status=STATUS_UNSUCCESSFUL;???????????????????????????????????//設(shè)置完成狀態(tài)??
  • ????????pIrP->IoStatus.Information=0;????????????????????????????????????????????????????????????????????//設(shè)置讀取長(zhǎng)度??
  • ????????IoCompleteRequest(pIrP,IO_NO_INCREMENT);????????????????????????????????????????//完成IRP??
  • ????????return?status;??
  • ????}??
  • ????DbgPrint("0X%0X\n",user_address);??
  • ??
  • ????__try??
  • ????{??
  • ????????????//判斷指針是否可寫(xiě)??
  • ????????ProbeForWrite(user_address,ulReadLength,4);??
  • ????????memset(user_address,0XAA,ulReadLength);??
  • ????????DbgPrint("測(cè)試下");??
  • ????}??
  • ????__except(EXCEPTION_EXECUTE_HANDLER)??
  • ????{??
  • ????????DbgPrint("打我PG我不乖\n");??
  • ????????status=STATUS_UNSUCCESSFUL;??
  • ????}??
  • ??
  • ????//完成IRP??
  • ????pIrP->IoStatus.Status=status;????????????????????????????????????????????????????????????????????//設(shè)置完成狀態(tài)??
  • ????pIrP->IoStatus.Information=ulReadLength;?????????????????????????????????????????//設(shè)置讀取長(zhǎng)度??
  • ????IoCompleteRequest(pIrP,IO_NO_INCREMENT);????????????????????????????????????????//完成IRP??
  • ??
  • ????return?status;??
  • }??
  • ??
  • //寫(xiě)派遣函數(shù)??
  • NTSTATUS?HelloDDKWrite(IN?PDEVICE_OBJECT?pDevObj,IN?PIRP?pIrP)??
  • {??
  • //#if?DBG??
  • //??_asm?int?3??
  • //#endif??
  • ????PDEVICE_EXTENSION?pDevExt=(PDEVICE_EXTENSION)pDevObj->DeviceExtension;??
  • ????NTSTATUS?status=STATUS_SUCCESS;??
  • ??
  • ????PIO_STACK_LOCATION?stack=IoGetCurrentIrpStackLocation(pIrP);??
  • ????ULONG?ulWriteLength=stack->Parameters.Read.Length;???????????????????????????????????????????//獲取寫(xiě)的長(zhǎng)度??
  • ????ULONG?ulReadOffset=(ULONG)stack->Parameters.Read.ByteOffset.QuadPart;????//獲取寫(xiě)的偏移??
  • ????PVOID?user_address=pIrP->UserBuffer;?????????????????????????????????????????????????????????????????????????//獲取用戶模式地址??
  • ??
  • ????if?(user_address==NULL)??
  • ????{??
  • ????????ASSERT(FALSE);??
  • ????????//完成IRP??
  • ????????pIrP->IoStatus.Status=STATUS_UNSUCCESSFUL;???????????????????????????????????//設(shè)置完成狀態(tài)??
  • ????????pIrP->IoStatus.Information=0;????????????????????????????????????????????????????????????????????//設(shè)置讀取長(zhǎng)度??
  • ????????IoCompleteRequest(pIrP,IO_NO_INCREMENT);????????????????????????????????????????//完成IRP??
  • ????????return?status;??
  • ????}??
  • ????DbgPrint("0X%0X\n",user_address);??
  • ??
  • ????__try??
  • ????{??
  • ????????//判斷指針是否可寫(xiě)??
  • ????????ProbeForWrite(user_address,ulWriteLength,4);??
  • ??
  • ????????UCHAR?buffer[10]={0};??
  • ????????memcpy(buffer,user_address,ulWriteLength);??
  • ????????for?(int?i=0;i<(int)ulWriteLength;i++)??
  • ????????{??
  • ????????????DbgPrint("%02x\n",buffer[i]);??
  • ????????}??
  • ??
  • ????????memset(user_address,0XAA,ulWriteLength);??
  • ??
  • ????????DbgPrint("測(cè)試下");??
  • ????}??
  • ????__except(EXCEPTION_EXECUTE_HANDLER)??
  • ????{??
  • ????????DbgPrint("打我PG我不乖\n");??
  • ????????status=STATUS_UNSUCCESSFUL;??
  • ????}??
  • ??
  • ????//完成IRP??
  • ????pIrP->IoStatus.Status=status;????????????????????????????????????????????????????????????????????//設(shè)置完成狀態(tài)??
  • ????pIrP->IoStatus.Information=ulWriteLength;????????????????????????????????????????????//設(shè)置寫(xiě)取長(zhǎng)度??
  • ????IoCompleteRequest(pIrP,IO_NO_INCREMENT);????????????????????????????????????????//完成IRP??
  • ??
  • ????return?status;??
  • }??
  • ??
  • //卸載函數(shù)??
  • void?HelloUnload(IN?PDRIVER_OBJECT?DriverObject)??
  • {??
  • ????????DbgPrint("Goodbye?from!\n");??
  • ????????PDEVICE_OBJECT?pNextObj=NULL;??
  • ????????pNextObj=DriverObject->DeviceObject;??
  • ??
  • ????????while?(pNextObj)??
  • ????????{??
  • ????????????PDEVICE_EXTENSION?pDevExt=(PDEVICE_EXTENSION)pNextObj->DeviceExtension;??
  • ????????????//釋放內(nèi)存??
  • ????????????if?(pDevExt->buffer)??
  • ????????????{??
  • ????????????????ExFreePool(pDevExt->buffer);??
  • ????????????????pDevExt->buffer=NULL;??
  • ????????????}??
  • ????????????//刪除符號(hào)連接??
  • ????????????IoDeleteSymbolicLink(&pDevExt->ustrSymLinkName);??
  • ????????????//刪除設(shè)備??
  • ????????????IoDeleteDevice(pDevExt->pDevice);??
  • ????????????pNextObj=pNextObj->NextDevice;??
  • ????????}??
  • }??
  • ??
  • //創(chuàng)建設(shè)備??
  • NTSTATUS?CreateDevice(PDRIVER_OBJECT?pDriver_Object)??
  • {??
  • ????//定義變量??
  • ????NTSTATUS?status=STATUS_SUCCESS;??
  • ????PDEVICE_OBJECT?pDevObje=NULL;??
  • ????PDEVICE_EXTENSION?pDevExt=NULL;??
  • ??
  • ????//初始化字符串??
  • ????UNICODE_STRING?devname;??
  • ????UNICODE_STRING?symLinkName;??
  • ????RtlInitUnicodeString(&devname,L"\\device\\hello");??
  • ????RtlInitUnicodeString(&symLinkName,L"\\??\\HelloDDK");??
  • ??
  • ????//創(chuàng)建設(shè)備??
  • ????if?(IoCreateDevice(pDriver_Object,sizeof(PDEVICE_EXTENSION),&devname,FILE_DEVICE_UNKNOWN,NULL,TRUE,&pDevObje)!=STATUS_SUCCESS?)??
  • ????{??
  • ????????DbgPrint("創(chuàng)建設(shè)備失敗\n");??
  • ????????return?status;??
  • ????}??
  • ??
  • ????pDevExt=(PDEVICE_EXTENSION)pDevObje->DeviceExtension;??
  • ????pDevExt->pDevice=pDevObje;??
  • ????pDevExt->ustrDeviceName=devname;??
  • ????pDevExt->ustrSymLinkName=symLinkName;??
  • ??
  • ????//申請(qǐng)模擬文件的緩沖區(qū)??
  • ????pDevExt->buffer=(PUCHAR)ExAllocatePool(PagedPool,MAX_FILE_LENGTH);??
  • ????pDevExt->file_length=0;??
  • ??
  • ????if?(pDevExt->buffer==NULL)??
  • ????{??
  • ????????DbgPrint("內(nèi)存分配失敗\n");??
  • ????}??
  • ??
  • ??
  • ????//創(chuàng)建符號(hào)連接??
  • ????if?(IoCreateSymbolicLink(&symLinkName,&devname)!=STATUS_SUCCESS?)??
  • ????{??
  • ????????DbgPrint("創(chuàng)建符號(hào)連接失敗\n");??
  • ????????IoDeleteDevice(pDevObje);??
  • ????????return?status;??
  • ????}??
  • ????return?STATUS_SUCCESS;??
  • }??
  • ??
  • //派遣函數(shù)??
  • NTSTATUS?HelloDDKDispatchRoutine(IN?PDEVICE_OBJECT?pDevObj,IN?PIRP?pIrP)??
  • {??
  • //#if?DBG??
  • //??_asm?int?3??
  • //#endif??
  • ??
  • ????PIO_STACK_LOCATION?stack?=?IoGetCurrentIrpStackLocation(pIrP);??
  • ????//建立一個(gè)字符串?dāng)?shù)組與IRP類型對(duì)應(yīng)起來(lái)??
  • ????static?char*?irpname[]?=???
  • ????{??
  • ????????"IRP_MJ_CREATE",??
  • ????????"IRP_MJ_CREATE_NAMED_PIPE",??
  • ????????"IRP_MJ_CLOSE",??
  • ????????"IRP_MJ_READ",??
  • ????????"IRP_MJ_WRITE",??
  • ????????"IRP_MJ_QUERY_INFORMATION",??
  • ????????"IRP_MJ_SET_INFORMATION",??
  • ????????"IRP_MJ_QUERY_EA",??
  • ????????"IRP_MJ_SET_EA",??
  • ????????"IRP_MJ_FLUSH_BUFFERS",??
  • ????????"IRP_MJ_QUERY_VOLUME_INFORMATION",??
  • ????????"IRP_MJ_SET_VOLUME_INFORMATION",??
  • ????????"IRP_MJ_DIRECTORY_CONTROL",??
  • ????????"IRP_MJ_FILE_SYSTEM_CONTROL",??
  • ????????"IRP_MJ_DEVICE_CONTROL",??
  • ????????"IRP_MJ_INTERNAL_DEVICE_CONTROL",??
  • ????????"IRP_MJ_SHUTDOWN",??
  • ????????"IRP_MJ_LOCK_CONTROL",??
  • ????????"IRP_MJ_CLEANUP",??
  • ????????"IRP_MJ_CREATE_MAILSLOT",??
  • ????????"IRP_MJ_QUERY_SECURITY",??
  • ????????"IRP_MJ_SET_SECURITY",??
  • ????????"IRP_MJ_POWER",??
  • ????????"IRP_MJ_SYSTEM_CONTROL",??
  • ????????"IRP_MJ_DEVICE_CHANGE",??
  • ????????"IRP_MJ_QUERY_QUOTA",??
  • ????????"IRP_MJ_SET_QUOTA",??
  • ????????"IRP_MJ_PNP",??
  • ????};??
  • ??
  • ????UCHAR?type?=?stack->MajorFunction;??
  • ??
  • ????if?(type?>=?CountArray(irpname))??
  • ????????KdPrint(("無(wú)效的IRP類型?%X\n",?type));??
  • ????else??
  • ????????KdPrint(("%s\n",?irpname[type]));??
  • ??
  • ??
  • ??
  • ??
  • ????pIrP->IoStatus.Status=STATUS_SUCCESS;????????????????????//設(shè)置完成狀態(tài)??
  • ????pIrP->IoStatus.Information=0;????????????????????????????????????????//設(shè)置操作字節(jié)為0??
  • ????IoCompleteRequest(pIrP,IO_NO_INCREMENT);????????????//結(jié)束IRP派遣函數(shù),第二個(gè)參數(shù)表示不增加優(yōu)先級(jí)??
  • ????return?STATUS_SUCCESS;??
  • }?
  • 總結(jié)

    以上是生活随笔為你收集整理的EXE和SYS通信(ReadFile WriteFile) 其他方式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 日本精品在线观看 | 亚洲欧美高清在线 | 在线只有精品 | 亚洲第一免费 | 欧美三级一区二区三区 | 美女18网站 | 九九热精品在线视频 | 久九九 | 超碰caoporen| www.日日日| 久久精品23 | 久久亚洲精精品中文字幕早川悠里 | 精品国产人妻一区二区三区 | 日本精品一区在线观看 | 视频在线观看99 | 在线视频观看一区 | 一级大片免费看 | 超碰免费公开 | 国产黄色免费在线观看 | 波多野结衣影片 | 国产免费视频一区二区三区 | 枫可怜av | 久久大奶 | 四虎在线视频 | 这里只有精品6 | 大奶子网站 | 欧美日韩成人免费 | 亚洲不卡中文字幕无码 | 精品无码久久久久久久久成人 | 免费国产成人 | 国产精品黑人一区二区三区 | 久久性av | 岛国在线视频 | 五月婷婷天堂 | 嫩草影院中文字幕 | 免费看的一级片 | 精品久久久国产 | 久久精品免费看 | av中文在线天堂 | 色哟哟精品一区 | av第一福利 | 中文字幕一级二级三级 | 懂色av蜜臀av粉嫩av分享 | 日本www高清| 四虎影视成人 | 亚洲午夜精品久久久久久浪潮 | 成人深夜福利视频 | 黄色片子免费看 | 香蕉依人| 国产精品自产拍高潮在线观看 | 91久久精品夜夜躁日日躁欧美 | 欧美视频黄色 | 二区三区在线视频 | 天天射日日射 | 午夜在线观看影院 | 浪浪视频在线观看 | 日韩电影在线观看一区 | 欧洲精品视频在线 | 国产精品久久无码一三区 | 嫩草一区二区 | 国产精品美女久久久免费 | 一区二区三区在线观看免费 | 我和公激情中文字幕 | 人人艹人人爽 | 99视频国产精品免费观看a | 天天色天天 | 欧美日韩精品免费 | 毛片毛片毛片毛片毛片毛片毛片毛片 | 免费三级大片 | 天天舔天天爽 | 岛国裸体写真hd在线 | 天堂网av2018 | 爱爱高潮视频 | 久久99精品久久久久久园产越南 | 国产精品videos | 久久久免费网站 | 日韩精品一区二区三区在线视频 | 韩产日产国产欧产 | 伊伊成人网 | 动漫av在线播放 | 精品人妻一区二区三区久久夜夜嗨 | 国产一级二级毛片 | 一区二区美女 | 舒淇裸体午夜理伦 | h在线观看视频 | 老牛影视一区二区三区 | 亚洲风情第一页 | fc2成人免费视频 | 国产suv精品一区二区四 | 超碰成人免费在线 | 日本在线不卡一区二区 | 国产精品一区二区三区四区在线观看 | 国产精品美女www | 色狠狠av | 一级做a爰 | 亚洲黄色免费视频 | 美女黄色录像 | 午夜免费高清视频 | 91文字幕巨乱亚洲香蕉 |