EXE與SYS通訊 直接訪問模式

2021-07-02 19:12:08 字數 3382 閱讀 5291

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