열린 소켓에서 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 );
그런 다음 status와 pirp-> IoStatus-> Status에 앞서 언급 한 오류 코드가 포함되어있어 아무 것도 보내지 않거나 대상에 도달하지 못합니다. 어떤 제안?