📄 vxdoutp.c
字号:
#include "mex.h"
#include <windows.h>
#include <winioctl.h>
#define MEXHARD_INP CTL_CODE(FILE_DEVICE_UNKNOWN, 1, METHOD_NEITHER, FILE_ANY_ACCESS)
#define MEXHARD_OUTP CTL_CODE(FILE_DEVICE_UNKNOWN, 2, METHOD_NEITHER, FILE_ANY_ACCESS)
HANDLE hDevice;
void mexFunction( int nlhs, mxArray *plhs[],
int nrhs, const mxArray*prhs[] )
{
unsigned short inbuf[2]; // 端口号和返回数据
DWORD cbBytesReturned; // 返回字节数
double *ptr;
if (nrhs != 2)
mexErrMsgTxt("Need one parameter\n");
if (!mxIsNumeric(prhs[0]))
mexErrMsgTxt("Port should be numeric\n");
if (!mxIsNumeric(prhs[1]))
mexErrMsgTxt("Byte should be numeric\n");
// 获取端口号和输出数据
ptr = mxGetPr(prhs[0]);
inbuf[0] = (unsigned short) (ptr[0]);
inbuf[1] = (unsigned short) (ptr[1]);
// 动态加载VxD。VxD文件必须在当前目录或系统目录
// CreateFile认为以字符串"\\.\"开始的文件名为动态加载VxD
hDevice = CreateFile("\\\\.\\MEXHARD.VXD", 0,0,0,
CREATE_NEW, FILE_FLAG_DELETE_ON_CLOSE, 0);
if (hDevice == INVALID_HANDLE_VALUE)
mexErrMsgTxt("Cannot open driver\n");
//端口写操作
DeviceIoControl(hDevice, MEXHARD_OUTP,
inbuf, 2*sizeof(unsigned short),
NULL, 0,
&cbBytesReturned, NULL);
// VxD卸载
CloseHandle(hDevice);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -