exe部分
head.h
#ifndef ctl_code
#pragma message("\n \n-----------exe . include winioctl.h ")
#include//ctl_code ntddk.h wdm.h
#else
#pragma message("\n \n----------sys no include winioctl.h ")
#endif
#define add_code ctl_code(file_device_unknown, 0x800, method_in_direct,file_any_access)
#define sub_code ctl_code(file_device_unknown, 0x801, method_in_direct,file_any_access)
main.cpp
#include #include #include #include "head.h"
int add (handle hdevice ,int a,int b)
; int bufret=0;
ulong dwwrite=0;
deviceiocontrol(hdevice,add_code,&port,sizeof(port),&bufret,sizeof(bufret),&dwwrite,null);
return bufret;
}int main (void)
int k=add(hdevice,11,22);
printf("%d\n",k);
getchar();
getchar();
return 0;
}
sys部分
head.h
#ifndef ctl_code
#pragma message("\n \n-----------exe . include winioctl.h ")
#include//ctl_code ntddk.h wdm.h
#else
#pragma message("\n \n----------sys no include winioctl.h ")
#endif
#define add_code ctl_code(file_device_unknown, 0x800, method_in_direct,file_any_access)
#define sub_code ctl_code(file_device_unknown, 0x801, method_in_direct,file_any_access)
cpp
#include #include #include "head.h"
#ifdef __cplusplus
extern "c" ntstatus driverentry(in pdriver_object driverobject, in punicode_string registrypath);
#endif
ntstatus ddk_dispatchroutine_control(in pdevice_object pdevobj,in pirp pirp );
void testddk125096unload(in pdriver_object driverobject);
ntstatus createmydevice (in pdriver_object pdriverobject);
ntstatus driverentry(in pdriver_object driverobject, in punicode_string registrypath)
void testddk125096unload(in pdriver_object driverobject)
ntstatus ddk_dispatchroutine_control(in pdevice_object pdevobj,in pirp pirp )
kdprint(("a=%d,b=%d \n", a,b));
a=a+b;
//c、驅動層返回資料至使用者層
//操作輸出緩衝區
//int* outputbuffer = (int*)pirp->associatedirp.systembuffer;
int outputbuffer =(int)mmgetsystemaddressformdlsafe(pirp->mdladdress,normalpagepriority);
_asm
kdprint(("a+b=%d \n",a));
//設定實際操作輸出緩衝區長度
info = 4;
break;
}case sub_code:
}//end code switch
break;
} case irp_mj_create:
case irp_mj_close:
case irp_mj_read:
}//對相應的ipr進行處理
pirp->iostatus.information=info;//設定操作的位元組數為0,這裡無實際意義
pirp->iostatus.status=status_success;//返回成功
iocompleterequest(pirp,io_no_increment);//指示完成此irp
kdprint(("離開派遣函式\n"));//除錯資訊
return status_success; //返回成功
}ntstatus createmydevice (in pdriver_object pdriverobject)
if (status==status_object_name_exists )
if (status==status_object_name_collision)
kdprint(("裝置建立失敗...++++++++"));
return status;
} kdprint(("裝置建立成功...++++++++"));
pdevobj->flags |= do_buffered_io;
//建立符號鏈結
rtlinitunicodestring(&symlinkname,l"\\??\\my_driverlinkname");
status = iocreatesymboliclink( &symlinkname,&devname );
if (!nt_success(status)) /*status等於0*/
return status_success;
}
EXE與SYS通訊 其他模式
exe部分 head.h cpp view plain copy ifndef ctl code pragma message n n exe include winioctl.h include ctl code ntddk.h wdm.h else pragma message n n sys ...
EXE之間通訊
而且還有好幾種方法。1 傳送訊息傳遞 2 共享記憶體傳遞 3 使用com程序外伺服器 這篇文章主要說明一下,如何利用傳送訊息使兩個exe完成通訊。其他兩個方法感興趣可以搜尋下,都可以找到相應 傳送端 public partial class mainwindow window structlayou...
Qt 與外部exe程序間通訊 共享記憶體
一 程序間通訊的方法 本質上就是建立聯絡。分為訊息傳遞 比如通過作業系統的訊息機制,把程序1的訊息傳遞給程序2 另一種是共享儲存區域 比如共享記憶體,讀寫同乙個磁碟檔案,資料庫表等等 訊息傳遞在我看來暫時只知道是通過作業系統的訊息機制來實現的,而作業系統的訊息機制內容較多 參考文獻 windows訊...