mirror of
https://github.com/reactos/reactos.git
synced 2025-08-04 03:46:38 +00:00
- Implement KsCreateTopologyNode, KsCreatePin
svn path=/trunk/; revision=39546
This commit is contained in:
parent
f6fa8b2376
commit
335a11923d
3 changed files with 86 additions and 8 deletions
|
@ -7,7 +7,21 @@ KsCreatePin(
|
|||
IN ACCESS_MASK DesiredAccess,
|
||||
OUT PHANDLE ConnectionHandle)
|
||||
{
|
||||
return STATUS_SUCCESS;
|
||||
UINT ConnectSize = sizeof(KSPIN_CONNECT);
|
||||
|
||||
PKSDATAFORMAT_WAVEFORMATEX Format = (PKSDATAFORMAT_WAVEFORMATEX)(Connect + 1);
|
||||
if (Format->DataFormat.FormatSize == sizeof(KSDATAFORMAT) ||
|
||||
Format->DataFormat.FormatSize == sizeof(KSDATAFORMAT) + sizeof(WAVEFORMATEX))
|
||||
{
|
||||
ConnectSize += Format->DataFormat.FormatSize;
|
||||
}
|
||||
|
||||
return KspCreateObjectType(FilterHandle,
|
||||
L"{146F1A80-4791-11D0-A5D6-28DB04C10000}",
|
||||
(PVOID)Connect,
|
||||
ConnectSize,
|
||||
DesiredAccess,
|
||||
ConnectionHandle);
|
||||
}
|
||||
|
||||
KSDDKAPI NTSTATUS NTAPI
|
||||
|
|
|
@ -11,7 +11,15 @@ NewIKsDevice(IKsDevice** OutDevice);
|
|||
#define TAG_KSDEVICE TAG('K', 'S', 'E', 'D')
|
||||
#define TAG_KSOBJECT_TAG TAG('K', 'S', 'O', 'H')
|
||||
|
||||
|
||||
NTSTATUS
|
||||
NTAPI
|
||||
KspCreateObjectType(
|
||||
IN HANDLE ParentHandle,
|
||||
IN LPWSTR ObjectType,
|
||||
PVOID CreateParameters,
|
||||
UINT CreateParametersSize,
|
||||
IN ACCESS_MASK DesiredAccess,
|
||||
OUT PHANDLE NodeHandle);
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -1,13 +1,65 @@
|
|||
#include <ntddk.h>
|
||||
#include <debug.h>
|
||||
#include <ks.h>
|
||||
#include "priv.h"
|
||||
|
||||
/* ===============================================================
|
||||
Topology Functions
|
||||
*/
|
||||
|
||||
NTSTATUS
|
||||
NTAPI
|
||||
KspCreateObjectType(
|
||||
IN HANDLE ParentHandle,
|
||||
IN LPWSTR ObjectType,
|
||||
PVOID CreateParameters,
|
||||
UINT CreateParametersSize,
|
||||
IN ACCESS_MASK DesiredAccess,
|
||||
OUT PHANDLE NodeHandle)
|
||||
{
|
||||
NTSTATUS Status;
|
||||
IO_STATUS_BLOCK IoStatusBlock;
|
||||
OBJECT_ATTRIBUTES ObjectAttributes;
|
||||
UNICODE_STRING Name;
|
||||
|
||||
Name.Length = (wcslen(ObjectType) + 1) * sizeof(WCHAR) + CreateParametersSize;
|
||||
Name.MaximumLength += sizeof(WCHAR);
|
||||
Name.Buffer = ExAllocatePool(NonPagedPool, Name.MaximumLength);
|
||||
|
||||
if (!Name.Buffer)
|
||||
{
|
||||
return STATUS_INSUFFICIENT_RESOURCES;
|
||||
}
|
||||
|
||||
wcscpy(Name.Buffer, ObjectType);
|
||||
Name.Buffer[wcslen(ObjectType)] = '\\';
|
||||
|
||||
RtlMoveMemory(Name.Buffer + wcslen(ObjectType) +1, CreateParameters, CreateParametersSize);
|
||||
|
||||
Name.Buffer[Name.Length / 2] = L'\0';
|
||||
|
||||
InitializeObjectAttributes(&ObjectAttributes, &Name, OBJ_KERNEL_HANDLE | OBJ_CASE_INSENSITIVE, ParentHandle, NULL);
|
||||
|
||||
|
||||
Status = IoCreateFile(NodeHandle,
|
||||
DesiredAccess,
|
||||
&ObjectAttributes,
|
||||
&IoStatusBlock,
|
||||
NULL,
|
||||
0,
|
||||
0,
|
||||
FILE_OPEN,
|
||||
FILE_SYNCHRONOUS_IO_NONALERT,
|
||||
NULL,
|
||||
0,
|
||||
CreateFileTypeNone,
|
||||
NULL,
|
||||
IO_NO_PARAMETER_CHECKING | IO_FORCE_ACCESS_CHECK);
|
||||
|
||||
ExFreePool(Name.Buffer);
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
@unimplemented
|
||||
@implemented
|
||||
*/
|
||||
KSDDKAPI NTSTATUS NTAPI
|
||||
KsCreateTopologyNode(
|
||||
|
@ -16,8 +68,12 @@ KsCreateTopologyNode(
|
|||
IN ACCESS_MASK DesiredAccess,
|
||||
OUT PHANDLE NodeHandle)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return STATUS_UNSUCCESSFUL;
|
||||
return KspCreateObjectType(ParentHandle,
|
||||
L"{0621061A-EE75-11D0-B915-00A0C9223196}",
|
||||
(PVOID)NodeCreate,
|
||||
sizeof(KSNODE_CREATE),
|
||||
DesiredAccess,
|
||||
NodeHandle);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue