+\r
+uint8_t RNDIS_QueryRNDISProperty(uint32_t Oid, void* Buffer, uint16_t Length)\r
+{\r
+ uint8_t ErrorCode;\r
+\r
+ RNDIS_Query_Message_t QueryMessage;\r
+\r
+ struct\r
+ {\r
+ RNDIS_Query_Complete_t QueryMessageResponse;\r
+ uint8_t ContigiousBuffer[Length];\r
+ } QueryMessageResponseData;\r
+\r
+ QueryMessage.MessageType = REMOTE_NDIS_QUERY_MSG;\r
+ QueryMessage.MessageLength = sizeof(RNDIS_Query_Message_t);\r
+ QueryMessage.RequestId = RequestID++;\r
+ \r
+ QueryMessage.Oid = Oid;\r
+ QueryMessage.InformationBufferLength = Length;\r
+ QueryMessage.InformationBufferOffset = 0;\r
+ QueryMessage.DeviceVcHandle = 0;\r
+\r
+ if ((ErrorCode = RNDIS_SendEncapsulatedCommand(&QueryMessage,\r
+ sizeof(RNDIS_Query_Message_t))) != HOST_SENDCONTROL_Successful)\r
+ {\r
+ return ErrorCode;\r
+ }\r
+ \r
+ if ((ErrorCode = RNDIS_GetEncapsulatedResponse(&QueryMessageResponseData,\r
+ sizeof(QueryMessageResponseData))) != HOST_SENDCONTROL_Successful)\r
+ {\r
+ return ErrorCode;\r
+ }\r
+\r
+ memcpy(Buffer, &QueryMessageResponseData.ContigiousBuffer, Length);\r
+\r
+ return HOST_SENDCONTROL_Successful;\r
+}\r
+\r
+uint8_t RNDIS_GetPacketSize(uint16_t* PacketSize)\r
+{\r
+ uint8_t ErrorCode;\r
+\r
+ RNDIS_Packet_Message_t DeviceMessage;\r
+ \r
+ if ((ErrorCode = Pipe_Read_Stream_LE(&DeviceMessage, sizeof(RNDIS_Packet_Message_t))) != PIPE_RWSTREAM_NoError)\r
+ {\r
+ return ErrorCode;\r
+ }\r
+\r
+ *PacketSize = (uint16_t)DeviceMessage.DataLength;\r
+ \r
+ return PIPE_RWSTREAM_NoError;\r
+}\r