SM: initial work on SM_API_QUERY_INFORMATION (client side; ROS specific).
[reactos.git] / reactos / subsys / smss / smapi.c
index a157850..b514546 100644 (file)
@@ -21,7 +21,7 @@ static HANDLE SmApiPort = INVALID_HANDLE_VALUE;
 SMAPI(SmInvalid)
 {
        DPRINT("SM: %s called\n",__FUNCTION__);
-       Request->Status = STATUS_NOT_IMPLEMENTED;
+       Request->SmHeader.Status = STATUS_NOT_IMPLEMENTED;
        return STATUS_SUCCESS;
 }
 
@@ -67,10 +67,12 @@ SmpCallbackServer (PSM_PORT_MESSAGE Request,
        PSM_CONNECT_DATA  ConnectData = SmpGetConnectData (Request);
        UNICODE_STRING    CallbackPortName;
        ULONG             CallbackPortNameLength = SM_SB_NAME_MAX_LENGTH; /* TODO: compute length */
+       SB_CONNECT_DATA   SbConnectData;
+       ULONG             SbConnectDataLength = sizeof SbConnectData;
        
        DPRINT("SM: %s called\n", __FUNCTION__);
 
-       if(IMAGE_SUBSYSTEM_NATIVE == ConnectData->Subsystem)
+       if(IMAGE_SUBSYSTEM_NATIVE == ConnectData->SubSystemId)
        {
                DPRINT("SM: %s: we do not need calling back SM!\n",
                                __FUNCTION__);
@@ -81,14 +83,16 @@ SmpCallbackServer (PSM_PORT_MESSAGE Request,
                       CallbackPortNameLength);
        RtlInitUnicodeString (& CallbackPortName,
                              ClientData->SbApiPortName);
+
+       SbConnectData.SmApiMax = (sizeof SmApi / sizeof SmApi[0]);
        Status = NtConnectPort (& ClientData->SbApiPort,
                                & CallbackPortName,
                                NULL,
                                NULL,
                                NULL,
                                NULL,
-                               NULL,
-                               NULL);
+                               & SbConnectData,
+                               & SbConnectDataLength);
        return Status;
 }
 
@@ -138,13 +142,13 @@ SmpApiConnectedThread(PVOID pConnectedPort)
                              Reply = NULL;
                              break;
                        default:
-                               if ((Request.ApiIndex) &&
-                                       (Request.ApiIndex < (sizeof SmApi / sizeof SmApi[0])))
+                               if ((Request.SmHeader.ApiIndex) &&
+                                       (Request.SmHeader.ApiIndex < (sizeof SmApi / sizeof SmApi[0])))
                                {
-                                       Status = SmApi[Request.ApiIndex](&Request);
+                                       Status = SmApi[Request.SmHeader.ApiIndex](&Request);
                                        Reply = (PLPC_MESSAGE) & Request;
                                } else {
-                                       Request.Status = STATUS_NOT_IMPLEMENTED;
+                                       Request.SmHeader.Status = STATUS_NOT_IMPLEMENTED;
                                        Reply = (PLPC_MESSAGE) & Request;
                                }
                        }
@@ -181,11 +185,11 @@ SmpHandleConnectionRequest (PSM_PORT_MESSAGE Request)
        PVOID            Context = NULL;
        
        DPRINT("SM: %s called:\n  SubSystemID=%d\n  SbName=\"%S\"\n",
-                       __FUNCTION__, ConnectData->Subsystem, ConnectData->SbName);
+                       __FUNCTION__, ConnectData->SubSystemId, ConnectData->SbName);
 
        if(sizeof (SM_CONNECT_DATA) == Request->Header.DataSize)
        {
-               if(IMAGE_SUBSYSTEM_UNKNOWN == ConnectData->Subsystem)
+               if(IMAGE_SUBSYSTEM_UNKNOWN == ConnectData->SubSystemId)
                {
                        /*
                         * This is not a call to register an image set,
@@ -202,9 +206,9 @@ SmpHandleConnectionRequest (PSM_PORT_MESSAGE Request)
                         *  Reject GUIs classes: only odd subsystem IDs are
                         *  allowed to register here (tty mode images).
                         */
-                       if(1 == (ConnectData->Subsystem % 2))
+                       if(1 == (ConnectData->SubSystemId % 2))
                        {
-                               DPRINT("SM: %s: id = %d\n", __FUNCTION__, ConnectData->Subsystem);
+                               DPRINT("SM: %s: id = %d\n", __FUNCTION__, ConnectData->SubSystemId);
                                /*
                                 * SmCreateClient/2 is called here explicitly to *fail*.
                                 * If it succeeds, there is something wrong in the
@@ -236,7 +240,7 @@ SmpHandleConnectionRequest (PSM_PORT_MESSAGE Request)
                                        } else {
                                                DPRINT("SM: %s: SmpCallbackServer failed (Status=%08lx)\n",
                                                        __FUNCTION__, Status);
-                                               Status = SmDestroyClient (ConnectData->Subsystem);
+                                               Status = SmDestroyClient (ConnectData->SubSystemId);
                                        }
                                }
                        }