直接上代码

VOID CALLBACK test_io_completion_routine(

DWORD dwErrorCode,

DWORD dwNumberOfBytesTransfered,

LPOVERLAPPED lpOverlapped

)

{

printf("dwErrorCode %d, dwNumberOfBytesTransfered %d\n", dwErrorCode, dwNumberOfBytesTransfered);

printf("%s\n", (char*)(lpOverlapped + 1));

free(lpOverlapped);

}

BOOL

queue_read_req(

HANDLE hFile,

DWORD nNumberOfBytesToRead,

DWORD Offset)

{

BOOL bResult = FALSE;

OVERLAPPED* olv = (OVERLAPPED* )malloc(sizeof(OVERLAPPED) + nNumberOfBytesToRead);

if(olv)

{

DWORD nBytesRead = 0;

ZeroMemory(olv, sizeof(OVERLAPPED) + nNumberOfBytesToRead);

olv->Offset = Offset;

bResult = ReadFile(hFile, (void*)(olv + 1), nNumberOfBytesToRead, &nBytesRead, olv) ;

if (!bResult)

{

DWORD dwError = 0;

switch (dwError = GetLastError())

{

case ERROR_HANDLE_EOF:

free(olv);

break;

case ERROR_IO_PENDING:

break;

default:

break;

}

}

}

return bResult;

}

void test_io_port()

{

LPCWSTR FileTest = L"C:\\NTDLL.txt";

HANDLE hFile = CreateFileW(FileTest,               // file to open

GENERIC_READ,          // open for reading

FILE_SHARE_READ,       // share for reading

NULL,                  // default security

OPEN_EXISTING,         // existing file only

FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, // normal file

NULL); // no attr. template

if(hFile != INVALID_HANDLE_VALUE)

{

BindIoCompletionCallback(hFile, test_io_completion_routine, 0);

for(int i = 0; i < 5; i++)

{

queue_read_req(hFile, 1024, i*1024 );

}

Sleep(5000);

CloseHandle(hFile);

}

}

最新文章

  1. PHP 删除目录及目录下文件
  2. Yii2 高级版新建一个 Api 应用
  3. 关于Cookie和Session的优缺点
  4. Spring框架学习(二)
  5. js练习-控制div属性
  6. 编译并使用Lua语言
  7. 如何从 Xcode 控制台输出 JavaScript 的 log?
  8. 获取Pid
  9. 简单易学的SSM(Spring+SpringMVC+MyBatis)整合
  10. linux 下oracle 11g静默安装(完整版)
  11. Linux:日期用法,及格式定义
  12. (一) sublime安装和使用
  13. 【Android】webview javascript 注入方法
  14. 前端 ------ 03 body标签中的相关标签
  15. Windows&amp;Word 常用快捷键
  16. jquery submit ie6下失效的原因分析及解决方法
  17. Starting MySQL...The server quit without updating PID file [失败]local/mysql/data/localhost.localdomain.pid报错
  18. laravel model relationship
  19. PC和FPGA间的串口通信实现
  20. jsp button提交表单

热门文章

  1. MySQL的数据读取过程
  2. c# 引用与对象举例
  3. 12_Azkaban案例实践5_Command操作Hive脚本任务
  4. U盘装manjaro 18报Python error in job “initcpio”
  5. springboot集成Apollo分布式配置
  6. webSocket的场景应用
  7. D. Lakes in Berland (DFS或者BFS +连通块
  8. JVM之Java运行时数据区(线程隔离区)
  9. Python跨文件全局变量的使用
  10. FFmpeg常用命令学习笔记(六)图片与视频互转命令