我的程序创建了一个邮槽,但是当我调用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_WRITEGENERIC_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创建的mailslot客户端句柄用于发送消息。

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

10-07 19:17
查看更多