2003-07-11 01:23:16 +00:00
|
|
|
/* $Id: create.c,v 1.12 2003/07/11 01:23:15 royce Exp $
|
2000-06-04 17:27:39 +00:00
|
|
|
*
|
|
|
|
* COPYRIGHT: See COPYING in the top level directory
|
|
|
|
* PROJECT: ReactOS kernel
|
|
|
|
* FILE: ntoskrnl/lpc/create.c
|
|
|
|
* PURPOSE: Communication mechanism
|
|
|
|
* PROGRAMMER: David Welch (welch@cwcom.net)
|
|
|
|
* UPDATE HISTORY:
|
|
|
|
* Created 22/05/98
|
|
|
|
*/
|
|
|
|
|
|
|
|
/* INCLUDES *****************************************************************/
|
|
|
|
|
2003-06-07 Casper S. Hornstrup <chorns@users.sourceforge.net>
Changes for compiling with w32api
* include/ddk/obfuncs.h (ObCreateObject): Remove.
* include/ntos/zwtypes.h (ObRosCreateObject): Add.
* ntoskrnl/ntoskrnl.def, ntoskrnl/ntoskrnl.edf: Export ObCreateObject@36
and ObRosCreateObject@20.
* ntoskrnl/cm/ntfunc.c, ntoskrnl/cm/registry.c, ntoskrnl/cm/regobj.c,
ntoskrnl/io/create.c, ntoskrnl/io/device.c, ntoskrnl/io/iocomp.c,
ntoskrnl/lpc/connect.c, ntoskrnl/lpc/create.c, ntoskrnl/mm/section.c,
ntoskrnl/nt/evtpair.c, ntoskrnl/nt/mutant.c, ntoskrnl/nt/ntevent.c,
ntoskrnl/nt/ntsem.c, ntoskrnl/nt/nttimer.c, ntoskrnl/nt/profile.c,
ntoskrnl/ob/dirobj.c, ntoskrnl/ob/namespc.c, ntoskrnl/ob/symlink.c,
ntoskrnl/ps/create.c, ntoskrnl/ps/process.c, ntoskrnl/se/token.c,
subsys/win32k/ntuser/winsta.c: Use ObRosCreateObject, not ObCreateObject.
* ntoskrnl/ob/object.c (ObRosCreateObject): Rename from ObCreateObject.
(ObCreateObject): Add stub.
svn path=/trunk/; revision=4867
2003-06-07 12:23:14 +00:00
|
|
|
#define NTOS_MODE_KERNEL
|
|
|
|
#include <ntos.h>
|
2002-09-08 10:23:54 +00:00
|
|
|
#include <internal/port.h>
|
|
|
|
#include <internal/dbg.h>
|
2000-06-04 17:27:39 +00:00
|
|
|
|
|
|
|
#define NDEBUG
|
|
|
|
#include <internal/debug.h>
|
|
|
|
|
2001-12-02 23:34:43 +00:00
|
|
|
STATIC NTSTATUS STDCALL
|
|
|
|
VerifyCreateParameters (IN PHANDLE PortHandle,
|
|
|
|
IN POBJECT_ATTRIBUTES ObjectAttributes,
|
|
|
|
IN ULONG MaxConnectInfoLength,
|
|
|
|
IN ULONG MaxDataLength,
|
|
|
|
IN ULONG Reserved)
|
2001-01-29 00:13:22 +00:00
|
|
|
{
|
2001-12-02 23:34:43 +00:00
|
|
|
if (NULL == PortHandle)
|
|
|
|
{
|
|
|
|
return (STATUS_INVALID_PARAMETER_1);
|
|
|
|
}
|
|
|
|
if (NULL == ObjectAttributes)
|
|
|
|
{
|
|
|
|
return (STATUS_INVALID_PARAMETER_2);
|
|
|
|
}
|
|
|
|
if ((ObjectAttributes->Attributes & OBJ_OPENLINK)
|
|
|
|
|| (ObjectAttributes->Attributes & OBJ_OPENIF)
|
|
|
|
|| (ObjectAttributes->Attributes & OBJ_EXCLUSIVE)
|
|
|
|
|| (ObjectAttributes->Attributes & OBJ_PERMANENT)
|
|
|
|
|| (ObjectAttributes->Attributes & OBJ_INHERIT))
|
|
|
|
{
|
|
|
|
return (STATUS_INVALID_PORT_ATTRIBUTES);
|
|
|
|
}
|
|
|
|
if (MaxConnectInfoLength > 0x104) /* FIXME: use a macro! */
|
|
|
|
{
|
|
|
|
return (STATUS_INVALID_PARAMETER_3);
|
|
|
|
}
|
|
|
|
if (MaxDataLength > 0x148) /* FIXME: use a macro! */
|
|
|
|
{
|
|
|
|
return (STATUS_INVALID_PARAMETER_4);
|
|
|
|
}
|
|
|
|
/* FIXME: some checking is done also on Reserved */
|
|
|
|
return (STATUS_SUCCESS);
|
2001-01-29 00:13:22 +00:00
|
|
|
}
|
|
|
|
|
2000-06-04 17:27:39 +00:00
|
|
|
|
2001-08-26 17:30:21 +00:00
|
|
|
NTSTATUS STDCALL
|
2001-12-02 23:34:43 +00:00
|
|
|
NiCreatePort (PVOID ObjectBody,
|
|
|
|
PVOID Parent,
|
|
|
|
PWSTR RemainingPath,
|
|
|
|
POBJECT_ATTRIBUTES ObjectAttributes)
|
2000-06-04 17:27:39 +00:00
|
|
|
{
|
2001-12-02 23:34:43 +00:00
|
|
|
if (RemainingPath == NULL)
|
|
|
|
{
|
|
|
|
return (STATUS_SUCCESS);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (wcschr(RemainingPath+1, '\\') != NULL)
|
|
|
|
{
|
|
|
|
return (STATUS_UNSUCCESSFUL);
|
|
|
|
}
|
|
|
|
|
|
|
|
return (STATUS_SUCCESS);
|
2000-06-04 17:27:39 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2001-01-29 00:13:22 +00:00
|
|
|
/**********************************************************************
|
|
|
|
* NAME EXPORTED
|
|
|
|
* NtCreatePort@20
|
|
|
|
*
|
|
|
|
* DESCRIPTION
|
|
|
|
*
|
|
|
|
* ARGUMENTS
|
|
|
|
* PortHandle,
|
|
|
|
* ObjectAttributes,
|
|
|
|
* MaxConnectInfoLength,
|
|
|
|
* MaxDataLength,
|
|
|
|
* Reserved
|
|
|
|
*
|
|
|
|
* RETURN VALUE
|
|
|
|
*/
|
2002-09-08 10:23:54 +00:00
|
|
|
EXPORTED NTSTATUS STDCALL
|
2001-12-02 23:34:43 +00:00
|
|
|
NtCreatePort (PHANDLE PortHandle,
|
|
|
|
POBJECT_ATTRIBUTES ObjectAttributes,
|
|
|
|
ULONG MaxConnectInfoLength,
|
|
|
|
ULONG MaxDataLength,
|
|
|
|
ULONG Reserved)
|
2000-06-04 17:27:39 +00:00
|
|
|
{
|
2001-12-02 23:34:43 +00:00
|
|
|
PEPORT Port;
|
|
|
|
NTSTATUS Status;
|
|
|
|
|
|
|
|
DPRINT("NtCreatePort() Name %x\n", ObjectAttributes->ObjectName->Buffer);
|
|
|
|
|
|
|
|
/* Verify parameters */
|
|
|
|
Status = VerifyCreateParameters (PortHandle,
|
|
|
|
ObjectAttributes,
|
|
|
|
MaxConnectInfoLength,
|
|
|
|
MaxDataLength,
|
|
|
|
Reserved);
|
|
|
|
if (!NT_SUCCESS(Status))
|
|
|
|
{
|
|
|
|
return (Status);
|
|
|
|
}
|
|
|
|
/* Ask Ob to create the object */
|
2003-06-07 Casper S. Hornstrup <chorns@users.sourceforge.net>
Changes for compiling with w32api
* include/ddk/obfuncs.h (ObCreateObject): Remove.
* include/ntos/zwtypes.h (ObRosCreateObject): Add.
* ntoskrnl/ntoskrnl.def, ntoskrnl/ntoskrnl.edf: Export ObCreateObject@36
and ObRosCreateObject@20.
* ntoskrnl/cm/ntfunc.c, ntoskrnl/cm/registry.c, ntoskrnl/cm/regobj.c,
ntoskrnl/io/create.c, ntoskrnl/io/device.c, ntoskrnl/io/iocomp.c,
ntoskrnl/lpc/connect.c, ntoskrnl/lpc/create.c, ntoskrnl/mm/section.c,
ntoskrnl/nt/evtpair.c, ntoskrnl/nt/mutant.c, ntoskrnl/nt/ntevent.c,
ntoskrnl/nt/ntsem.c, ntoskrnl/nt/nttimer.c, ntoskrnl/nt/profile.c,
ntoskrnl/ob/dirobj.c, ntoskrnl/ob/namespc.c, ntoskrnl/ob/symlink.c,
ntoskrnl/ps/create.c, ntoskrnl/ps/process.c, ntoskrnl/se/token.c,
subsys/win32k/ntuser/winsta.c: Use ObRosCreateObject, not ObCreateObject.
* ntoskrnl/ob/object.c (ObRosCreateObject): Rename from ObCreateObject.
(ObCreateObject): Add stub.
svn path=/trunk/; revision=4867
2003-06-07 12:23:14 +00:00
|
|
|
Status = ObRosCreateObject (PortHandle,
|
2001-12-02 23:34:43 +00:00
|
|
|
PORT_ALL_ACCESS,
|
|
|
|
ObjectAttributes,
|
|
|
|
ExPortType,
|
|
|
|
(PVOID*)&Port);
|
|
|
|
if (!NT_SUCCESS(Status))
|
|
|
|
{
|
|
|
|
return (Status);
|
|
|
|
}
|
|
|
|
|
|
|
|
Status = NiInitializePort (Port);
|
|
|
|
Port->MaxConnectInfoLength = 260; /* FIXME: use a macro! */
|
|
|
|
Port->MaxDataLength = 328; /* FIXME: use a macro! */
|
|
|
|
|
|
|
|
ObDereferenceObject (Port);
|
|
|
|
|
|
|
|
return (Status);
|
2000-06-04 17:27:39 +00:00
|
|
|
}
|
|
|
|
|
2001-01-29 00:13:22 +00:00
|
|
|
/**********************************************************************
|
|
|
|
* NAME EXPORTED
|
|
|
|
* NtCreateWaitablePort@20
|
|
|
|
*
|
|
|
|
* DESCRIPTION
|
|
|
|
* Waitable ports can be connected to with NtSecureConnectPort.
|
|
|
|
* No port interface can be used with waitable ports but
|
|
|
|
* NtReplyWaitReceivePort and NtReplyWaitReceivePortEx.
|
|
|
|
* Present only in w2k+.
|
|
|
|
*
|
|
|
|
* ARGUMENTS
|
|
|
|
* PortHandle,
|
|
|
|
* ObjectAttributes,
|
|
|
|
* MaxConnectInfoLength,
|
|
|
|
* MaxDataLength,
|
|
|
|
* Reserved
|
|
|
|
*
|
|
|
|
* RETURN VALUE
|
|
|
|
*/
|
2002-09-08 10:23:54 +00:00
|
|
|
EXPORTED NTSTATUS STDCALL
|
2001-12-02 23:34:43 +00:00
|
|
|
NtCreateWaitablePort (OUT PHANDLE PortHandle,
|
|
|
|
IN POBJECT_ATTRIBUTES ObjectAttributes,
|
|
|
|
IN ULONG MaxConnectInfoLength,
|
|
|
|
IN ULONG MaxDataLength,
|
|
|
|
IN ULONG Reserved)
|
2001-01-29 00:13:22 +00:00
|
|
|
{
|
2001-12-02 23:34:43 +00:00
|
|
|
NTSTATUS Status;
|
|
|
|
|
|
|
|
/* Verify parameters */
|
|
|
|
Status = VerifyCreateParameters (PortHandle,
|
|
|
|
ObjectAttributes,
|
|
|
|
MaxConnectInfoLength,
|
|
|
|
MaxDataLength,
|
|
|
|
Reserved);
|
|
|
|
if (STATUS_SUCCESS != Status)
|
|
|
|
{
|
|
|
|
return (Status);
|
|
|
|
}
|
|
|
|
/* TODO */
|
|
|
|
return (STATUS_NOT_IMPLEMENTED);
|
2001-01-29 00:13:22 +00:00
|
|
|
}
|
2000-06-04 17:27:39 +00:00
|
|
|
|
|
|
|
/* EOF */
|