ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

NTSTATUS WINAPI SmQueryInformation ( IN HANDLE  hSmApiPort,
IN SM_INFORMATION_CLASS  SmInformationClass,
IN OUT PVOID  Data,
IN ULONG  DataLength,
IN OUT PULONG ReturnedDataLength  OPTIONAL 
)

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

Generated on Fri May 25 2012 04:40:00 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.