SM: some server side code for SM_API_QUERY_INFORMATION
authorEmanuele Aliberti <ea@iol.it>
Tue, 12 Apr 2005 21:25:58 +0000 (21:25 +0000)
committerEmanuele Aliberti <ea@iol.it>
Tue, 12 Apr 2005 21:25:58 +0000 (21:25 +0000)
svn path=/trunk/; revision=14598

reactos/subsys/smss/client.c
reactos/subsys/smss/makefile
reactos/subsys/smss/smapiquery.c
reactos/subsys/smss/smss.c
reactos/subsys/smss/smss.h

index d0efa95..212e333 100644 (file)
@@ -276,4 +276,49 @@ SmDestroyClient (ULONG SubsystemId)
        return Status;\r
 }\r
 \r
+/* === Utilities for SmQryInfo === */\r
+\r
+/**********************************************************************\r
+ * SmGetClientBasicInformation/1\r
+ */\r
+NTSTATUS FASTCALL\r
+SmGetClientBasicInformation (PSM_BASIC_INFORMATION i)\r
+{\r
+       INT              Index = 0;\r
+       PSM_CLIENT_DATA  Client = NULL;\r
+\r
+       DPRINT("SM: %s called\n", __FUNCTION__);\r
+\r
+       RtlEnterCriticalSection (& SmpClientDirectory.Lock);\r
+\r
+       i->SubSystemCount = SmpClientDirectory.Count;\r
+       i->Unused = 0;\r
+       \r
+       if (SmpClientDirectory.Count > 0)\r
+       {\r
+               Client = SmpClientDirectory.Client;\r
+               while ((NULL != Client) && (Index < SM_QRYINFO_MAX_SS_COUNT))\r
+               {\r
+                       i->SubSystem[Index].Id        = Client->SubsystemId;\r
+                       i->SubSystem[Index].Flags     = 0; /* TODO */\r
+                       i->SubSystem[Index].ProcessId = 0; /* TODO */\r
+                       Client = Client->Next;\r
+               }\r
+       }\r
+\r
+       RtlLeaveCriticalSection (& SmpClientDirectory.Lock);\r
+       return STATUS_SUCCESS;\r
+}\r
+\r
+/**********************************************************************\r
+ * SmGetSubSystemInformation/1\r
+ */\r
+NTSTATUS FASTCALL\r
+SmGetSubSystemInformation (PSM_SUBSYSTEM_INFORMATION i)\r
+{\r
+       DPRINT("SM: %s called\n", __FUNCTION__);\r
+\r
+       return STATUS_NOT_IMPLEMENTED;\r
+}\r
+\r
 /* EOF */\r
index 3845a34..87f64a8 100644 (file)
@@ -24,8 +24,12 @@ TARGET_OBJECTS = $(TARGET_NAME).o \
                 smapi.o smapicomp.o smapiexec.o smapiquery.o \
                 client.o debug.o print.o
 
+DEP_OBJECTS = $(TARGET_OBJECTS)
+
 include $(PATH_TO_TOP)/rules.mak
 
 include $(TOOLS_PATH)/helper.mk
 
+include $(TOOLS_PATH)/depend.mk
+
 # EOF
index 4172231..d1c402d 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id$\r
+/* $Id$\r
  *\r
  * smapiquery.c - SM_API_QUERY_INFORMATION\r
  *\r
@@ -37,8 +37,33 @@ SMAPI(SmQryInfo)
        NTSTATUS Status = STATUS_SUCCESS;\r
 \r
        DPRINT("SM: %s called\n", __FUNCTION__);\r
-       \r
-       Request->SmHeader.Status = STATUS_NOT_IMPLEMENTED;\r
+\r
+       switch (Request->Request.QryInfo.SmInformationClass)\r
+       {\r
+       case SmBasicInformation:\r
+               if(Request->Request.QryInfo.DataLength != sizeof (SM_BASIC_INFORMATION))\r
+               {\r
+                       Request->Reply.QryInfo.DataLength = sizeof (SM_BASIC_INFORMATION);\r
+                       Request->SmHeader.Status = STATUS_INFO_LENGTH_MISMATCH;\r
+               }else{\r
+                       Request->SmHeader.Status =\r
+                               SmGetClientBasicInformation (& Request->Reply.QryInfo.BasicInformation);\r
+               }\r
+               break;\r
+       case SmSubSystemInformation:\r
+               if(Request->Request.QryInfo.DataLength != sizeof (SM_SUBSYSTEM_INFORMATION))\r
+               {\r
+                       Request->Reply.QryInfo.DataLength = sizeof (SM_SUBSYSTEM_INFORMATION);\r
+                       Request->SmHeader.Status = STATUS_INFO_LENGTH_MISMATCH;\r
+               }else{\r
+                       Request->SmHeader.Status =\r
+                               SmGetSubSystemInformation (& Request->Reply.QryInfo.SubSystemInformation);\r
+               }\r
+               break;\r
+       default:\r
+               Request->SmHeader.Status = STATUS_NOT_IMPLEMENTED;\r
+               break;\r
+       }\r
        return Status;\r
 }\r
 \r
index b03197c..09438cf 100644 (file)
@@ -56,6 +56,7 @@ NtProcessStartup(PPEB Peb)
   }
   /* Initialize the system */
   Status = InitSessionManager();
+  /* Watch required subsystems TODO */
 #if 0
   if (!NT_SUCCESS(Status))
     {
index eae6143..b5352bf 100644 (file)
@@ -96,6 +96,8 @@ NTSTATUS SmInitializeClientManagement(VOID);
 NTSTATUS STDCALL SmCreateClient(PSM_PORT_MESSAGE,PSM_CLIENT_DATA*);
 NTSTATUS STDCALL SmDestroyClient(ULONG);
 NTSTATUS STDCALL SmCompleteClientInitialization (HANDLE hProcess);
+NTSTATUS FASTCALL SmGetClientBasicInformation (PSM_BASIC_INFORMATION);
+NTSTATUS FASTCALL SmGetSubSystemInformation (PSM_SUBSYSTEM_INFORMATION);
 
 /* debug.c */
 extern HANDLE DbgSsApiPort;