mirror of
https://github.com/reactos/reactos.git
synced 2025-08-04 23:35:45 +00:00
SM: some server side code for SM_API_QUERY_INFORMATION
svn path=/trunk/; revision=14598
This commit is contained in:
parent
95cdf6e471
commit
b27e166698
5 changed files with 80 additions and 3 deletions
|
@ -276,4 +276,49 @@ SmDestroyClient (ULONG SubsystemId)
|
||||||
return Status;
|
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 */
|
/* EOF */
|
||||||
|
|
|
@ -24,8 +24,12 @@ TARGET_OBJECTS = $(TARGET_NAME).o \
|
||||||
smapi.o smapicomp.o smapiexec.o smapiquery.o \
|
smapi.o smapicomp.o smapiexec.o smapiquery.o \
|
||||||
client.o debug.o print.o
|
client.o debug.o print.o
|
||||||
|
|
||||||
|
DEP_OBJECTS = $(TARGET_OBJECTS)
|
||||||
|
|
||||||
include $(PATH_TO_TOP)/rules.mak
|
include $(PATH_TO_TOP)/rules.mak
|
||||||
|
|
||||||
include $(TOOLS_PATH)/helper.mk
|
include $(TOOLS_PATH)/helper.mk
|
||||||
|
|
||||||
|
include $(TOOLS_PATH)/depend.mk
|
||||||
|
|
||||||
# EOF
|
# EOF
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: $
|
/* $Id$
|
||||||
*
|
*
|
||||||
* smapiquery.c - SM_API_QUERY_INFORMATION
|
* smapiquery.c - SM_API_QUERY_INFORMATION
|
||||||
*
|
*
|
||||||
|
@ -38,7 +38,32 @@ SMAPI(SmQryInfo)
|
||||||
|
|
||||||
DPRINT("SM: %s called\n", __FUNCTION__);
|
DPRINT("SM: %s called\n", __FUNCTION__);
|
||||||
|
|
||||||
|
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;
|
Request->SmHeader.Status = STATUS_NOT_IMPLEMENTED;
|
||||||
|
break;
|
||||||
|
}
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -56,6 +56,7 @@ NtProcessStartup(PPEB Peb)
|
||||||
}
|
}
|
||||||
/* Initialize the system */
|
/* Initialize the system */
|
||||||
Status = InitSessionManager();
|
Status = InitSessionManager();
|
||||||
|
/* Watch required subsystems TODO */
|
||||||
#if 0
|
#if 0
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
|
|
|
@ -96,6 +96,8 @@ NTSTATUS SmInitializeClientManagement(VOID);
|
||||||
NTSTATUS STDCALL SmCreateClient(PSM_PORT_MESSAGE,PSM_CLIENT_DATA*);
|
NTSTATUS STDCALL SmCreateClient(PSM_PORT_MESSAGE,PSM_CLIENT_DATA*);
|
||||||
NTSTATUS STDCALL SmDestroyClient(ULONG);
|
NTSTATUS STDCALL SmDestroyClient(ULONG);
|
||||||
NTSTATUS STDCALL SmCompleteClientInitialization (HANDLE hProcess);
|
NTSTATUS STDCALL SmCompleteClientInitialization (HANDLE hProcess);
|
||||||
|
NTSTATUS FASTCALL SmGetClientBasicInformation (PSM_BASIC_INFORMATION);
|
||||||
|
NTSTATUS FASTCALL SmGetSubSystemInformation (PSM_SUBSYSTEM_INFORMATION);
|
||||||
|
|
||||||
/* debug.c */
|
/* debug.c */
|
||||||
extern HANDLE DbgSsApiPort;
|
extern HANDLE DbgSsApiPort;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue