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,
|
IN ACCESS_MASK DesiredAccess,
|
||||||
OUT PHANDLE ConnectionHandle)
|
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
|
KSDDKAPI NTSTATUS NTAPI
|
||||||
|
|
|
@ -11,7 +11,15 @@ NewIKsDevice(IKsDevice** OutDevice);
|
||||||
#define TAG_KSDEVICE TAG('K', 'S', 'E', 'D')
|
#define TAG_KSDEVICE TAG('K', 'S', 'E', 'D')
|
||||||
#define TAG_KSOBJECT_TAG TAG('K', 'S', 'O', 'H')
|
#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 "priv.h"
|
||||||
#include <debug.h>
|
|
||||||
#include <ks.h>
|
|
||||||
|
|
||||||
/* ===============================================================
|
/* ===============================================================
|
||||||
Topology Functions
|
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
|
KSDDKAPI NTSTATUS NTAPI
|
||||||
KsCreateTopologyNode(
|
KsCreateTopologyNode(
|
||||||
|
@ -16,8 +68,12 @@ KsCreateTopologyNode(
|
||||||
IN ACCESS_MASK DesiredAccess,
|
IN ACCESS_MASK DesiredAccess,
|
||||||
OUT PHANDLE NodeHandle)
|
OUT PHANDLE NodeHandle)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED;
|
return KspCreateObjectType(ParentHandle,
|
||||||
return STATUS_UNSUCCESSFUL;
|
L"{0621061A-EE75-11D0-B915-00A0C9223196}",
|
||||||
|
(PVOID)NodeCreate,
|
||||||
|
sizeof(KSNODE_CREATE),
|
||||||
|
DesiredAccess,
|
||||||
|
NodeHandle);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue