EXE與SYS通訊 其他模式

2021-08-02 14:19:09 字數 3944 閱讀 2495

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  no include winioctl.h ")

#endif

#define add_code ctl_code(file_device_unknown,  0x800,  method_neither,file_any_access)

#define sub_code ctl_code(file_device_unknown,  0x801,  method_neither,file_any_access)

main.cpp

[cpp]view plain

copy

#include 

#include 

#include 

#include "head.h"

intadd (

handle

hdevice ,

inta,

intb)  

;  int

bufret=0;  

ulong

dwwrite=0;  

deviceiocontrol(hdevice,add_code,&port,sizeof

(port),&bufret,

sizeof

(bufret),&dwwrite,null);  

return

bufret;  

}  int

main (

void

)    

intk=add(hdevice,11,22);  

printf("%d\n"

,k);  

getchar();  

getchar();  

return

0;  

}  

sys部分

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  no include winioctl.h ")

#endif

#define add_code ctl_code(file_device_unknown,  0x800,  method_neither,file_any_access)

#define sub_code ctl_code(file_device_unknown,  0x801,  method_neither,file_any_access)

cpp部分

[cpp]view plain

copy

#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;  

int* outputbuffer=(

int*)pirp->userbuffer;  

probeforwrite(outputbuffer,cbout,sizeof

(int

));  

kdprint(("outputbuffer=%x"

,outputbuffer));  

_asm  

kdprint(("a+b=%d \n"

,a));  

}  __except(exception_execute_handler)  

//設定實際操作輸出緩衝區長度

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 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....

Qt 與外部exe程序間通訊 共享記憶體

一 程序間通訊的方法 本質上就是建立聯絡。分為訊息傳遞 比如通過作業系統的訊息機制,把程序1的訊息傳遞給程序2 另一種是共享儲存區域 比如共享記憶體,讀寫同乙個磁碟檔案,資料庫表等等 訊息傳遞在我看來暫時只知道是通過作業系統的訊息機制來實現的,而作業系統的訊息機制內容較多 參考文獻 windows訊...

WCF 宿主與通訊模式(二)

每個wcf服務都必須託管在windows程序中,該程序稱為宿主程序 host process 單個宿主程序可以託管多個服務,相同的服務型別也可以託管在多個宿主程序中。wcf中託管服務一般有一下四種 寄宿方式 描述 console寄宿 利於開發除錯,但不是生產環境中的最佳實踐。winform寄宿 方便...