Pregunta

Estoy llamando WsKSendTo en un socket abierto (IRP rendimientos éxito en la devolución de llamada). Pero WskSendTo en que los rendimientos de socket c0000184, lo que se hace referencia como STATUS_INVALID_DEVICE_STATE. ¿Qué tipo de errores se dirige el presente?

¿Me he perdido algo en la rutina de envío?

    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    );

Después de estado y pirp-> IoStatus-> Estado contiene el código de error ya mencionado y no se envía nada (o de llegar al destino). ¿Alguna sugerencia?

¿Fue útil?

Solución

c0000184 se devuelve si el conector no está inicializado completamente. Por ejemplo, si la toma de corriente todavía no está vinculada a una dirección. El mismo problema existst en espacio de usuario, siempre se unen a su toma! (Aquí usando WskBind.)

También es útil para sincronizar los pasos individuales del proceso de inicialización: asignación de contexto socket, la creación de zócalo y de unión usando KEVENT (ver KeInitializeEvent para empezar).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top