- 论坛徽章:
- 0
|
回复 2楼 wanghun 的帖子
提取代码如下:
#include <stdio.h>
#define _IOC_NRBITS 8
#define _IOC_TYPEBITS 8
#define _IOC_SIZEBITS 14
#define _IOC_NRSHIFT 0
#define _IOC_TYPESHIFT (_IOC_NRSHIFT+_IOC_NRBITS)
#define _IOC_SIZESHIFT (_IOC_TYPESHIFT+_IOC_TYPEBITS)
#define _IOC_DIRSHIFT (_IOC_SIZESHIFT+_IOC_SIZEBITS)
#define _IOC_WRITE 2U
#define _IOC_READ 1U
#define _IOC(dir,type,nr,size) \
(((dir) << _IOC_DIRSHIFT) | \
((type) << _IOC_TYPESHIFT) | \
((nr) << _IOC_NRSHIFT) | \
((size) << _IOC_SIZESHIFT))
unsigned int __invalid_size_argument_for_IOC = 0;
#define _IOC_TYPECHECK(t) \
((sizeof(t) == sizeof(t[1]) && \
sizeof(t) < (1 << _IOC_SIZEBITS)) ? \
sizeof(t) : __invalid_size_argument_for_IOC)
typedef unsigned long UINT32;
typedef unsigned long U32;
#define _T(arg) arg
#define TCHAR char
#define MAX_PARAMS 256
typedef struct _VW_CMD_BLOCK
{
U32 ACK;
U32 Handle;
U32 RCode; //0=good; otherwise with a error
code
U32 ParamsLen; //in words (4 bytes)
U32 VWCmd;
U32 Params[MAX_PARAMS];
} VW_CMD_BLOCK;
static const unsigned char VW_MAGIC = 'v'|'w';
#define _IOWR _IOC(_IOC_READ|_IOC_WRITE,VW_MAGIC,0xA04,(_IOC_TYPECHECK(VW_CMD_BL
OCK)))
inline const TCHAR* IoCtlToStr(UINT32 ioCtlCode) {
printf("IoCtlToStr(UINT32 ioCtlCode)");
const TCHAR* ctlCodeStr;
switch(ioCtlCode) {
case _IOWR:
ctlCodeStr = _T("VW_IOCTL_SEND_CMD");
break;
default:
ctlCodeStr = _T("UNKNOWN_IOCTL");
break;
}
return ctlCodeStr;
}
int main(void) {
IoCtlToStr(2);
return 0;
} |
|