2009-07-21 10 views
0

オープンされたソケットでWsKSendToを呼び出しています(irpはコールバックで成功を返します)。しかし、そのソケットのWskSendToは、STATUS_INVALID_DEVICE_STATEとして参照されているc0000184を返します。これによってどのようなエラーが処理されますか?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が返されます。たとえば、ソケットがまだアドレスにバインドされていない場合などです。同じ問題がユーザーランドに存在し、常にソケットをバインドします! (ここではWskBindを使用しています)

初期化プロセスの個々のステップを同期することも役に立ちます:KEVENTを使用してソケットコンテキストの割り当て、ソケットの作成とバインディングを開始することができます(KeInitializeEvent開始)。

関連する問題