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
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
-/* $Id: $\r
+/* $Id$\r
*\r
* smapiquery.c - SM_API_QUERY_INFORMATION\r
*\r
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
}
/* Initialize the system */
Status = InitSessionManager();
+ /* Watch required subsystems TODO */
#if 0
if (!NT_SUCCESS(Status))
{
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;