[TDILIB, IPHLPAPI, WSHTCPIP]
[reactos.git] / lib / tdilib / handle.c
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS TDI interface
4 * FILE: handle.c
5 * PURPOSE: TDI transport handle management
6 */
7
8 #include "iphlpapi_private.h"
9
10 const PWCHAR TcpFileName = L"\\Device\\Tcp";
11
12 NTSTATUS openTcpFile(PHANDLE tcpFile)
13 {
14 UNICODE_STRING fileName;
15 OBJECT_ATTRIBUTES objectAttributes;
16 IO_STATUS_BLOCK ioStatusBlock;
17 NTSTATUS status;
18
19 RtlInitUnicodeString( &fileName, TcpFileName );
20
21 InitializeObjectAttributes( &objectAttributes,
22 &fileName,
23 OBJ_CASE_INSENSITIVE,
24 NULL,
25 NULL );
26
27 status = ZwCreateFile( tcpFile,
28 SYNCHRONIZE | GENERIC_EXECUTE |
29 GENERIC_READ | GENERIC_WRITE,
30 &objectAttributes,
31 &ioStatusBlock,
32 NULL,
33 FILE_ATTRIBUTE_NORMAL,
34 FILE_SHARE_READ | FILE_SHARE_WRITE,
35 FILE_OPEN_IF,
36 FILE_SYNCHRONOUS_IO_NONALERT,
37 0,
38 0 );
39
40 /* String does not need to be freed: it points to the constant
41 * string we provided */
42
43 if (!NT_SUCCESS(status))
44 *tcpFile = INVALID_HANDLE_VALUE;
45
46 return status;
47 }
48
49 VOID closeTcpFile( HANDLE h )
50 {
51 ASSERT(h != INVALID_HANDLE_VALUE);
52
53 NtClose( h );
54 }