SM: some server side code for SM_API_QUERY_INFORMATION

svn path=/trunk/; revision=14598
This commit is contained in:
Emanuele Aliberti 2005-04-12 21:25:58 +00:00
parent 95cdf6e471
commit b27e166698
5 changed files with 80 additions and 3 deletions

View file

@ -276,4 +276,49 @@ SmDestroyClient (ULONG SubsystemId)
return Status;
}
/* === Utilities for SmQryInfo === */
/**********************************************************************
* SmGetClientBasicInformation/1
*/
NTSTATUS FASTCALL
SmGetClientBasicInformation (PSM_BASIC_INFORMATION i)
{
INT Index = 0;
PSM_CLIENT_DATA Client = NULL;
DPRINT("SM: %s called\n", __FUNCTION__);
RtlEnterCriticalSection (& SmpClientDirectory.Lock);
i->SubSystemCount = SmpClientDirectory.Count;
i->Unused = 0;
if (SmpClientDirectory.Count > 0)
{
Client = SmpClientDirectory.Client;
while ((NULL != Client) && (Index < SM_QRYINFO_MAX_SS_COUNT))
{
i->SubSystem[Index].Id = Client->SubsystemId;
i->SubSystem[Index].Flags = 0; /* TODO */
i->SubSystem[Index].ProcessId = 0; /* TODO */
Client = Client->Next;
}
}
RtlLeaveCriticalSection (& SmpClientDirectory.Lock);
return STATUS_SUCCESS;
}
/**********************************************************************
* SmGetSubSystemInformation/1
*/
NTSTATUS FASTCALL
SmGetSubSystemInformation (PSM_SUBSYSTEM_INFORMATION i)
{
DPRINT("SM: %s called\n", __FUNCTION__);
return STATUS_NOT_IMPLEMENTED;
}
/* EOF */

View 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

View file

@ -1,4 +1,4 @@
/* $Id: $
/* $Id$
*
* smapiquery.c - SM_API_QUERY_INFORMATION
*
@ -37,8 +37,33 @@ SMAPI(SmQryInfo)
NTSTATUS Status = STATUS_SUCCESS;
DPRINT("SM: %s called\n", __FUNCTION__);
Request->SmHeader.Status = STATUS_NOT_IMPLEMENTED;
switch (Request->Request.QryInfo.SmInformationClass)
{
case SmBasicInformation:
if(Request->Request.QryInfo.DataLength != sizeof (SM_BASIC_INFORMATION))
{
Request->Reply.QryInfo.DataLength = sizeof (SM_BASIC_INFORMATION);
Request->SmHeader.Status = STATUS_INFO_LENGTH_MISMATCH;
}else{
Request->SmHeader.Status =
SmGetClientBasicInformation (& Request->Reply.QryInfo.BasicInformation);
}
break;
case SmSubSystemInformation:
if(Request->Request.QryInfo.DataLength != sizeof (SM_SUBSYSTEM_INFORMATION))
{
Request->Reply.QryInfo.DataLength = sizeof (SM_SUBSYSTEM_INFORMATION);
Request->SmHeader.Status = STATUS_INFO_LENGTH_MISMATCH;
}else{
Request->SmHeader.Status =
SmGetSubSystemInformation (& Request->Reply.QryInfo.SubSystemInformation);
}
break;
default:
Request->SmHeader.Status = STATUS_NOT_IMPLEMENTED;
break;
}
return Status;
}

View file

@ -56,6 +56,7 @@ NtProcessStartup(PPEB Peb)
}
/* Initialize the system */
Status = InitSessionManager();
/* Watch required subsystems TODO */
#if 0
if (!NT_SUCCESS(Status))
{

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