--- ../driver/packet.c 2009-12-22 17:26:26.000000000 -0800 +++ packet.c 2010-06-03 07:41:53.570500000 -0700 @@ -1529,35 +1529,23 @@ // OidData=Irp->AssociatedIrp.SystemBuffer; - if ((IrpSp->Parameters.DeviceIoControl.InputBufferLength == IrpSp->Parameters.DeviceIoControl.OutputBufferLength) - && - (IrpSp->Parameters.DeviceIoControl.InputBufferLength >= sizeof(PACKET_OID_DATA)) - && - (IrpSp->Parameters.DeviceIoControl.InputBufferLength >= sizeof(PACKET_OID_DATA)-1+OidData->Length)) { + if (IrpSp->Parameters.DeviceIoControl.InputBufferLength >= sizeof(OidData->Oid)) { - TRACE_MESSAGE2(PACKET_DEBUG_LOUD, "BIOCSETOID|BIOCQUERYOID Request: Oid=%08lx, Length=%08lx",OidData->Oid,OidData->Length); + TRACE_MESSAGE2( PACKET_DEBUG_LOUD, "BIOCSETOID or BIOCQUERYOID Request: Oid=%08lx", OidData->Oid ); // // The buffer is valid // - if (FunctionCode == BIOCSETOID){ - - pRequest->Request.RequestType=NdisRequestSetInformation; - pRequest->Request.DATA.SET_INFORMATION.Oid=OidData->Oid; - - pRequest->Request.DATA.SET_INFORMATION.InformationBuffer=OidData->Data; - pRequest->Request.DATA.SET_INFORMATION.InformationBufferLength=OidData->Length; - - - } - else{ - - pRequest->Request.RequestType=NdisRequestQueryInformation; - pRequest->Request.DATA.QUERY_INFORMATION.Oid=OidData->Oid; - - pRequest->Request.DATA.QUERY_INFORMATION.InformationBuffer=OidData->Data; - pRequest->Request.DATA.QUERY_INFORMATION.InformationBufferLength=OidData->Length; - + if (BIOCSETOID == FunctionCode) { + pRequest->Request.RequestType = NdisRequestSetInformation; + pRequest->Request.DATA.SET_INFORMATION.Oid = OidData->Oid; + pRequest->Request.DATA.SET_INFORMATION.InformationBuffer = OidData + sizeof(OidData->Oid); + pRequest->Request.DATA.SET_INFORMATION.InformationBufferLength = IrpSp->Parameters.DeviceIoControl.InputBufferLength - sizeof(OidData->Oid); + } else { + pRequest->Request.RequestType = NdisRequestQueryInformation; + pRequest->Request.DATA.QUERY_INFORMATION.Oid = OidData->Oid; + pRequest->Request.DATA.QUERY_INFORMATION.InformationBuffer = OidData; + pRequest->Request.DATA.QUERY_INFORMATION.InformationBufferLength = IrpSp->Parameters.DeviceIoControl.OutputBufferLength; } NdisResetEvent(&pRequest->InternalRequestCompletedEvent); @@ -1600,15 +1588,13 @@ // if (FunctionCode == BIOCSETOID) { - OidData->Length = pRequest->Request.DATA.SET_INFORMATION.BytesRead; - TRACE_MESSAGE1(PACKET_DEBUG_LOUD, "BIOCSETOID completed, BytesRead = %u",OidData->Length); + TRACE_MESSAGE1(PACKET_DEBUG_LOUD, "BIOCSETOID completed, BytesRead = %u", + pRequest->Request.DATA.SET_INFORMATION.BytesRead + sizeof(OidData->Oid)); } else { if (FunctionCode == BIOCQUERYOID) { - OidData->Length = pRequest->Request.DATA.QUERY_INFORMATION.BytesWritten; - if (Status == NDIS_STATUS_SUCCESS) { // @@ -1628,11 +1614,11 @@ } } - TRACE_MESSAGE1(PACKET_DEBUG_LOUD, "BIOCQUERYOID completed, BytesWritten = %u",OidData->Length); + TRACE_MESSAGE1(PACKET_DEBUG_LOUD, "BIOCQUERYOID completed, BytesWritten = %u", + pRequest->Request.DATA.QUERY_INFORMATION.BytesWritten); } } - ExInterlockedInsertTailList( &Open->RequestList, &pRequest->ListElement, @@ -1640,7 +1626,10 @@ if (Status == NDIS_STATUS_SUCCESS) { - SET_RESULT_SUCCESS(sizeof(PACKET_OID_DATA) - 1 + OidData->Length); + if (BIOCQUERYOID == FunctionCode) + SET_RESULT_SUCCESS( pRequest->Request.DATA.QUERY_INFORMATION.BytesWritten ); + else // (BIOCSETOID == FunctionCode) + SET_RESULT_SUCCESS( pRequest->Request.DATA.SET_INFORMATION.BytesRead + sizeof(OidData->Oid) ); } else { @@ -1649,7 +1638,6 @@ break; - default: TRACE_MESSAGE(PACKET_DEBUG_LOUD, "Unknown IOCTL code");