【问题标题】:Windows Readfile return ERROR_INVALID_PARAMETER 87Windows 读取文件返回 ERROR_INVALID_PARAMETER 87
【发布时间】:2017-03-07 05:00:06
【问题描述】:

我的程序创建了一个邮槽,但是当我调用 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);

Readfile 失败,错误代码为 ERROR_INVALID_PARAMETER。

【问题讨论】:

  • 发布更多代码。你在检查 CreateFile 的返回值吗?
  • 程序代码:使用 MAILSLOT_WAIT_FOREVER 和 sa 创建邮件槽。这就是成功。返回值不是 INVALID_HANDLE_VALUE。

标签: c++ windows readfile


【解决方案1】:

您正试图以错误的方式使用邮槽。

通过调用CreateMailslot 创建的邮槽服务器 句柄用于接收 消息。

通过调用CreateFile 创建的邮槽客户端 句柄用于发送 消息。

您不能使用客户端句柄调用ReadFile。邮槽不是双向的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-24
    • 2018-01-07
    • 2020-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多