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寄宿 方便...