2009-07-21 95 views
0

我在打開的套接字上調用WsKSendTo(irp在回調中返回成功)。但是該套接字上的WskSendTo返回c0000184,引用的內容爲STATUS_INVALID_DEVICE_STATE。這個問題解決了什麼樣的錯誤?WsKSendTo返回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->狀態含有上述提到的錯誤代碼並沒有什麼被髮送(或到達目的地)。有什麼建議麼?

回答

1

如果套接字未完全初始化,則返回c0000184。例如,如果套接字尚未綁定到地址。在userland中存在同樣的問題,總是綁定你的套接字! (這裏使用WskBind。)

同步初始化過程的各個步驟也很有用:使用KEVENT分配套接字上下文,套接字創建和綁定(請參閱KeInitializeEvent作爲開始)。