我呼吁WsKSendTo上打开插座(irp返回的成功,在回).但WskSendTo在这座返回c0000184,什么是引用为STATUS_INVALID_DEVICE_STATE.什么样的错误解决这个吗?

我错过什么东西在发送程序?

    psc->dstaddr.sin_family = AF_INET;
psc->dstaddr.sin_port = 0x6973;  // big endian
psc->dstaddr.sin_addr.S_un.S_un_b.s_b1 = 0x02;
psc->dstaddr.sin_addr.S_un.S_un_b.s_b2 = 
    psc->dstaddr.sin_addr.S_un.S_un_b.s_b3 = 0x17;
psc->dstaddr.sin_addr.S_un.S_un_b.s_b4 = 0x0a;

// create IRP
psc->pirp = IoAllocateIrp(1, FALSE);
if(!psc->pirp){
    DbgPrint("ShoutShout: IRP not allocated\n");
    FreeShoutContext(psc);
    return STATUS_UNSUCCESSFUL;
}
IoSetCompletionRoutine(
    psc->pirp,
    ShoutShoutComplete,
    psc,
    TRUE,
    TRUE,
    TRUE
    );

// initiate send
const WSK_PROVIDER_DATAGRAM_DISPATCH *dispatch = 
    (PWSK_PROVIDER_DATAGRAM_DISPATCH)sockContext->socket->Dispatch;
status = dispatch->WskSendTo(  
    sockContext->socket,       //PWSK_SOCKET
    &psc->buf,                 //__in PWSK_BUF
    NULL,                      // undocumented IN ULONG  Flags,   
    (PSOCKADDR)&psc->dstaddr,  // IN PSOCKADDR  RemoteAddress OPTIONAL, 
    0,             //  IN SIZE_T  ControlInfoLength, 
    0,             //  IN PCMSGHDR  ControlInfo OPTIONAL,  
    psc->pirp);        //  IN PIRP  Irp    );

之后状态和pirp->IoStatus->的状况含有上述提到的错误代码并且没什么被送(或到达目的地)。任何建议?

有帮助吗?

解决方案

c0000184返回,如果在座不完全的初始化。例如,如果在座不但限于一个地址。同样的问题existst在用户态,总是结合你的座!(在这里使用WskBind.)

它也是有用的,同步各个步骤的初始化过程:分配的座方面,插座的建立,并结合使用KEVENT(见 KeInitializeEvent 一开始)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top