文号
t79688
阅读
6979
回复
1
收藏
2
WriteFile GetLastError return 6
2016/04/23
IP:江苏
自己写的Ring0驱动,已经为设备创建符号链接,CreateFile ReadFile 正常WriteFile 时驱动没反应  GetLastError 会返回 6 句柄 句柄无效




原文出处 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
无非是参数的类型与C++不同而造成的问题,在C#中:
[DllImport("kernel32.dll")]
private static extern bool WriteFile(int hFile, byte[] lpBuffer, int nNumberOfBytesToWrite, ref int lpNumberOfBytesWritten, IntPtr lpOverlapped);

注意最后一个参数,如果采用ref OVERLAPPED 传一个空OVERLAPPED 的话就会返回错误6句柄无效。采用C#专为句柄创造的数据类型IntPtr类型,IntPtr.Zero就可以等效于C++中传入null了。
10年5个月前修改于 10年5个月前IP:四川
822622
1楼

其实可以用[In, Out] OVERLAPPED,并且把OVERLAPPED声明为[StructLayout(LayoutKind.Sequential)] public class

这样的好处是可以传null

引用
评论
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的