mirror of
https://github.com/reactos/reactos.git
synced 2025-06-25 12:49:46 +00:00
Git conversion: Make reactos the root directory, move rosapps, rostests, wallpapers into modules, and delete rossubsys.
This commit is contained in:
parent
b94e2d8ca0
commit
c2c66aff7d
24198 changed files with 0 additions and 37285 deletions
103
sdk/lib/smlib/connect.c
Normal file
103
sdk/lib/smlib/connect.c
Normal file
|
@ -0,0 +1,103 @@
|
|||
/*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS system libraries
|
||||
* FILE: reactos/lib/smlib/connect.c
|
||||
* PURPOSE: Connect to the API LPC port exposed by the SM
|
||||
*/
|
||||
|
||||
#include "precomp.h"
|
||||
|
||||
#define NDEBUG
|
||||
#include <debug.h>
|
||||
|
||||
/**********************************************************************
|
||||
* NAME EXPORTED
|
||||
* SmConnectApiPort/4
|
||||
*
|
||||
* DESCRIPTION
|
||||
* Connect to SM API port and register a session "begin" port (Sb)
|
||||
* or to issue API requests to SmApiPort.
|
||||
*
|
||||
* ARGUMENTS
|
||||
* pSbApiPortName: name of the Sb port the calling subsystem
|
||||
* server already created in the system name space;
|
||||
* hSbApiPort: LPC port handle (checked, but not used: the
|
||||
* subsystem is required to have already created
|
||||
* the callback port before it connects to the SM);
|
||||
* wSubsystem: a valid IMAGE_SUBSYSTEM_xxx value;
|
||||
* phSmApiPort: a pointer to a HANDLE, which will be
|
||||
* filled with a valid client-side LPC comm port.
|
||||
*
|
||||
* There should be only two ways to call this API:
|
||||
* a) subsystems willing to register with SM will use it
|
||||
* with full parameters (the function checks them);
|
||||
* b) regular SM clients, will set to 0 the 1st, the 2nd,
|
||||
* and the 3rd parameter.
|
||||
*
|
||||
* RETURN VALUE
|
||||
* If all three optional values are omitted, an LPC status.
|
||||
* STATUS_INVALID_PARAMETER_MIX if PortName is defined and
|
||||
* both hSbApiPort and wSubsystem are 0.
|
||||
*/
|
||||
NTSTATUS WINAPI
|
||||
SmConnectApiPort (IN PUNICODE_STRING pSbApiPortName OPTIONAL,
|
||||
IN HANDLE hSbApiPort OPTIONAL,
|
||||
IN WORD wSubSystemId OPTIONAL,
|
||||
IN OUT PHANDLE phSmApiPort)
|
||||
{
|
||||
UNICODE_STRING SmApiPortName;
|
||||
SECURITY_QUALITY_OF_SERVICE SecurityQos;
|
||||
NTSTATUS Status = STATUS_SUCCESS;
|
||||
SM_CONNECT_DATA ConnectData = {0,0,{0}};
|
||||
ULONG ConnectDataLength = 0;
|
||||
|
||||
DPRINT("SMLIB: %s called\n", __FUNCTION__);
|
||||
|
||||
if (pSbApiPortName)
|
||||
{
|
||||
if (pSbApiPortName->Length > (sizeof pSbApiPortName->Buffer[0] * SM_SB_NAME_MAX_LENGTH))
|
||||
{
|
||||
return STATUS_INVALID_PARAMETER_1;
|
||||
}
|
||||
if (NULL == hSbApiPort || IMAGE_SUBSYSTEM_UNKNOWN == wSubSystemId)
|
||||
{
|
||||
return STATUS_INVALID_PARAMETER_MIX;
|
||||
}
|
||||
RtlZeroMemory (& ConnectData, sizeof ConnectData);
|
||||
ConnectData.Unused = 0;
|
||||
ConnectData.SubSystemId = wSubSystemId;
|
||||
if (pSbApiPortName->Length > 0)
|
||||
{
|
||||
RtlCopyMemory (& ConnectData.SbName,
|
||||
pSbApiPortName->Buffer,
|
||||
pSbApiPortName->Length);
|
||||
}
|
||||
}
|
||||
ConnectDataLength = sizeof ConnectData;
|
||||
|
||||
SecurityQos.Length = sizeof (SecurityQos);
|
||||
SecurityQos.ImpersonationLevel = SecurityIdentification;
|
||||
SecurityQos.ContextTrackingMode = SECURITY_DYNAMIC_TRACKING;
|
||||
SecurityQos.EffectiveOnly = TRUE;
|
||||
|
||||
RtlInitUnicodeString (& SmApiPortName, SM_API_PORT_NAME);
|
||||
|
||||
Status = NtConnectPort (
|
||||
phSmApiPort,
|
||||
& SmApiPortName,
|
||||
& SecurityQos,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
& ConnectData,
|
||||
& ConnectDataLength
|
||||
);
|
||||
if (NT_SUCCESS(Status))
|
||||
{
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
DPRINT("SMLIB: %s failed (Status=0x%08lx)\n", __FUNCTION__, Status);
|
||||
return Status;
|
||||
}
|
||||
|
||||
/* EOF */
|
Loading…
Add table
Add a link
Reference in a new issue