Home | Info | Community | Development | myReactOS | Contact Us
Definition at line 43 of file query.c.
{ NTSTATUS Status = STATUS_SUCCESS; SM_PORT_MESSAGE SmReqMsg; if(0 == DataLength) { return STATUS_INFO_LENGTH_MISMATCH; } /* Marshal data in the port message */ switch (SmInformationClass) { case SmBasicInformation: if(DataLength != sizeof (SM_BASIC_INFORMATION)) { return STATUS_INFO_LENGTH_MISMATCH; } SmReqMsg.Request.QryInfo.SmInformationClass = SmBasicInformation; SmReqMsg.Request.QryInfo.DataLength = DataLength; SmReqMsg.Request.QryInfo.BasicInformation.SubSystemCount = 0; break; case SmSubSystemInformation: if(DataLength != sizeof (SM_SUBSYSTEM_INFORMATION)) { return STATUS_INFO_LENGTH_MISMATCH; } SmReqMsg.Request.QryInfo.SmInformationClass = SmSubSystemInformation; SmReqMsg.Request.QryInfo.DataLength = DataLength; SmReqMsg.Request.QryInfo.SubSystemInformation.SubSystemId = ((PSM_SUBSYSTEM_INFORMATION)Data)->SubSystemId; break; default: return STATUS_INVALID_PARAMETER_2; } /* SM API to invoke */ SmReqMsg.SmHeader.ApiIndex = SM_API_QUERY_INFORMATION; /* Prepare the port request message */ SmReqMsg.Header.u2.s2.Type = LPC_NEW_MESSAGE; SmReqMsg.Header.u1.s1.DataLength = SM_PORT_DATA_SIZE(SmReqMsg.Request); SmReqMsg.Header.u1.s1.TotalLength = SM_PORT_MESSAGE_SIZE; Status = NtRequestWaitReplyPort (hSmApiPort, (PPORT_MESSAGE) & SmReqMsg, (PPORT_MESSAGE) & SmReqMsg); if (NT_SUCCESS(Status)) { /* Unmarshal data */ RtlCopyMemory (Data, & SmReqMsg.Reply.QryInfo.BasicInformation, SmReqMsg.Reply.QryInfo.DataLength); /* Use caller provided storage to store data size */ if(NULL != ReturnedDataLength) { *ReturnedDataLength = SmReqMsg.Reply.QryInfo.DataLength; } return SmReqMsg.SmHeader.Status; } DPRINT("SMLIB: %s failed (Status=0x%08lx)\n", __FUNCTION__, Status); return Status; }