Windows 读取文件 return ERROR_INVALID_PARAMETER 87
Windows Readfile return ERROR_INVALID_PARAMETER 87
我的程序创建了一个邮槽,但是当我调用 ReadFile 时,我得到 ERROR_INVALID_PARAMETER
。
参数不对怎么办?
程序代码:
SECURITY_DESCRIPTOR sd;
InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(&sd, true, NULL, false);
SECURITY_ATTRIBUTES sa;
sa.lpSecurityDescriptor=&sd;
sa.bInheritHandle=true;
msg_id_ = CreateMailslot( msg_key_
, 0
, MAILSLOT_WAIT_FOREVER
, &sa
);
msg_id_
不是 INVALID_HANDLE_VALUE
所以这个函数成功了。
sa
应该允许 GENERIC_WRITE
和 GENERIC_READ
.
收件人代码:
msg_id_ = CreateFile( msg_key_
, GENERIC_WRITE | GENERIC_READ
, FILE_SHARE_WRITE | FILE_SHARE_READ
, 0
, OPEN_EXISTING
, FILE_FLAG_OVERLAPPED
, 0
);
ReadFile( msg_id_, (void*)msg, 1024, &byteLen, &ovRead);
读取文件失败,错误代码为 ERROR_INVALID_PARAMETER。
您试图以错误的方式使用邮槽。
通过调用 CreateMailslot
创建的邮槽 服务器 句柄用于 接收 消息。
通过调用 CreateFile
创建的邮槽 客户端 句柄用于 发送 消息。
您不能使用客户端句柄调用 ReadFile
。邮槽不是双向的。
我的程序创建了一个邮槽,但是当我调用 ReadFile 时,我得到 ERROR_INVALID_PARAMETER
。
参数不对怎么办?
程序代码:
SECURITY_DESCRIPTOR sd;
InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(&sd, true, NULL, false);
SECURITY_ATTRIBUTES sa;
sa.lpSecurityDescriptor=&sd;
sa.bInheritHandle=true;
msg_id_ = CreateMailslot( msg_key_
, 0
, MAILSLOT_WAIT_FOREVER
, &sa
);
msg_id_
不是 INVALID_HANDLE_VALUE
所以这个函数成功了。
sa
应该允许 GENERIC_WRITE
和 GENERIC_READ
.
收件人代码:
msg_id_ = CreateFile( msg_key_
, GENERIC_WRITE | GENERIC_READ
, FILE_SHARE_WRITE | FILE_SHARE_READ
, 0
, OPEN_EXISTING
, FILE_FLAG_OVERLAPPED
, 0
);
ReadFile( msg_id_, (void*)msg, 1024, &byteLen, &ovRead);
读取文件失败,错误代码为 ERROR_INVALID_PARAMETER。
您试图以错误的方式使用邮槽。
通过调用 CreateMailslot
创建的邮槽 服务器 句柄用于 接收 消息。
通过调用 CreateFile
创建的邮槽 客户端 句柄用于 发送 消息。
您不能使用客户端句柄调用 ReadFile
。邮槽不是双向的。