30 DWORD nMaxUserNameSize)
52 if (pRevertToSelf ==
NULL || pGetUserNameW ==
NULL || pImpersonateNamedPipeClient ==
NULL)
61 if (pImpersonateNamedPipeClient(hNamedPipe))
67 Ret = pGetUserNameW(lpUserName, &
lpnSize);
135 DefaultTimeout.
QuadPart = -1200000000;
145 L"\\Device\\NamedPipe\\Win32Pipes.%p.%08x",
154 if (lpPipeAttributes)
210 *hReadPipe = ReadPipeHandle;
211 *hWritePipe = WritePipeHandle;
224 DWORD nOutBufferSize,
226 DWORD nDefaultTimeOut,
238 lpSecurityAttributes);
250 DWORD nOutBufferSize,
252 DWORD nDefaultTimeOut,
262 ULONG WriteModeMessage;
263 ULONG ReadModeMessage;
294 TRACE(
"Pipe name: %wZ\n", &NamedPipeName);
299 if(lpSecurityAttributes)
379 DefaultTimeOut.
QuadPart = nDefaultTimeOut * -10000
LL;
419 WARN(
"NtCreateNamedPipe failed (Status %x)!\n",
Status);
470 ULONG WaitPipeInfoSize;
471 PVOID DevicePathBuffer;
475 TRACE(
"Sent path: %S\n", lpNamedPipeName);
484 for (
i = 0;
i < NameLength;
i++)
490 DevicePathBuffer =
NULL;
504 WARN(
"Invalid name!\n");
530 if (*
p ==
L'\\')
break;
545 WARN(
"Invalid name!\n");
564 if (DevicePathBuffer ==
NULL)
572 DevicePath.
Buffer = DevicePathBuffer;
582 WARN(
"Invalid path type\n");
591 WaitPipeInfo =
RtlAllocateHeap(RtlGetProcessHeap(), 0, WaitPipeInfoSize);
592 if (WaitPipeInfo ==
NULL)
594 if (DevicePathBuffer !=
NULL)
596 RtlFreeHeap(RtlGetProcessHeap(), 0, DevicePathBuffer);
605 TRACE(
"Opening: %wZ\n", &DevicePath);
620 if (DevicePathBuffer !=
NULL)
622 RtlFreeHeap(RtlGetProcessHeap(), 0, DevicePathBuffer);
809 if (lpMaxCollectionCount || lpCollectDataTimeout)
814 if (!lpMaxCollectionCount || !lpCollectDataTimeout)
830 *lpMaxCollectionCount :
832 if (lpCollectDataTimeout)
864 DWORD nOutBufferSize,
895 DWORD nOutBufferSize,
1008 DWORD nMaxUserNameSize)
1013 if (lpState !=
NULL)
1032 if(lpCurInstances !=
NULL)
1050 if (lpMaxCollectionCount !=
NULL || lpCollectDataTimeout !=
NULL)
1065 if (lpMaxCollectionCount !=
NULL)
1070 if (lpCollectDataTimeout !=
NULL)
1080 *lpCollectDataTimeout = -2;
1084 *lpCollectDataTimeout = CollectDataTime.
LowPart;
1089 if (lpUserName !=
NULL)
1109 DWORD nMaxUserNameSize)
1115 if(lpUserName !=
NULL)
1125 UserNameA.
Buffer = lpUserName;
1133 lpMaxCollectionCount,
1134 lpCollectDataTimeout,
1137 if (Ret && lpUserName !=
NULL)
1176 &PipeLocalInformation,
1185 if (lpFlags !=
NULL)
1191 if (lpOutBufferSize !=
NULL)
1194 if (lpInBufferSize !=
NULL)
1197 if (lpMaxInstances !=
NULL)
1219 LPDWORD lpBytesLeftThisMessage)
1269 if (lpTotalBytesAvail)
1272 *lpTotalBytesAvail =
Buffer->ReadDataAvailable;
1288 if (lpBytesLeftThisMessage)
1325 if (lpBytesRead !=
NULL)
1353 if (lpBytesRead !=
NULL)
1386 *lpBytesRead =
Iosb.Information;
#define FILE_PIPE_BYTE_STREAM_TYPE
#define ERROR_INVALID_PARAMETER
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
#define PIPE_UNLIMITED_INSTANCES
return STATUS_NOT_SUPPORTED
_In_opt_ HANDLE _In_opt_ PIO_APC_ROUTINE _In_opt_ PVOID ApcContext
_Must_inspect_result_ _In_ WDFDEVICE _In_ ULONG _In_ ACCESS_MASK DesiredAccess
NTSTATUS NTAPI NtSetInformationFile(HANDLE hFile, PIO_STATUS_BLOCK io, PVOID ptr, ULONG len, FILE_INFORMATION_CLASS FileInformationClass)
#define FILE_PIPE_QUEUE_OPERATION
#define FSCTL_PIPE_DISCONNECT
struct png_info_def **typedef void(__cdecl typeof(png_destroy_read_struct))(struct png_struct_def **
#define OBJ_CASE_INSENSITIVE
#define ACCESS_SYSTEM_SECURITY
#define PIPE_TYPE_MESSAGE
IN BOOLEAN OUT PSTR Buffer
_In_ USHORT _In_ ULONG _In_ PSOCKADDR _In_ PSOCKADDR _Reserved_ ULONG _In_opt_ PVOID _In_opt_ const WSK_CLIENT_CONNECTION_DISPATCH _In_opt_ PEPROCESS _In_opt_ PETHREAD _In_opt_ PSECURITY_DESCRIPTOR SecurityDescriptor
NTSYSAPI LONGLONG WINAPI RtlExtendedLargeIntegerDivide(LONGLONG, INT, INT *)
GLdouble GLdouble GLdouble r
HANDLE WINAPI CreateNamedPipeA(LPCSTR lpName, DWORD dwOpenMode, DWORD dwPipeMode, DWORD nMaxInstances, DWORD nOutBufferSize, DWORD nInBufferSize, DWORD nDefaultTimeOut, LPSECURITY_ATTRIBUTES lpSecurityAttributes)
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG x1
BOOL WINAPI WaitNamedPipeW(LPCWSTR lpNamedPipeName, DWORD nTimeOut)
*nSize LPSTR _Inout_ LPDWORD nSize
BOOLEAN NTAPI RtlFreeHeap(IN PVOID HeapHandle, IN ULONG Flags, IN PVOID HeapBase)
#define NtCurrentThread()
_Check_return_ _CRTIMP int __cdecl _wcsnicmp(_In_reads_or_z_(_MaxCount) const wchar_t *_Str1, _In_reads_or_z_(_MaxCount) const wchar_t *_Str2, _In_ size_t _MaxCount)
BOOL WINAPI GetNamedPipeInfo(HANDLE hNamedPipe, LPDWORD lpFlags, LPDWORD lpOutBufferSize, LPDWORD lpInBufferSize, LPDWORD lpMaxInstances)
#define FILE_PIPE_MESSAGE_TYPE
#define STATUS_INVALID_DEVICE_REQUEST
#define ERROR_NOT_ENOUGH_MEMORY
#define INVALID_HANDLE_VALUE
NTSYSCALLAPI NTSTATUS NTAPI NtFsControlFile(HANDLE FileHandle, HANDLE Event, PIO_APC_ROUTINE ApcRoutine, PVOID ApcContext, PIO_STATUS_BLOCK IoStatusBlock, ULONG FsControlCode, PVOID InputBuffer, ULONG InputBufferLength, PVOID OutputBuffer, ULONG OutputBufferLength)
BOOL WINAPI CallNamedPipeA(LPCSTR lpNamedPipeName, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize, LPDWORD lpBytesRead, DWORD nTimeOut)
#define TOKEN_IMPERSONATE
#define NMPWAIT_USE_DEFAULT_WAIT
_In_ PIO_STACK_LOCATION _Inout_ PFILE_OBJECT _Inout_ PVCB _Outptr_result_maybenull_ PDCB _In_ PDCB _In_ PDIRENT _In_ ULONG _In_ ULONG _In_ PUNICODE_STRING _In_ PACCESS_MASK _In_ USHORT ShareAccess
#define FILE_WRITE_ATTRIBUTES
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PLONGLONG _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_opt_ PULONG_PTR BytesRead
NTSYSAPI VOID NTAPI RtlInitAnsiString(PANSI_STRING DestinationString, PCSZ SourceString)
BOOL WINAPI WaitNamedPipeA(LPCSTR lpNamedPipeName, DWORD nTimeOut)
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_POWER_POLICY_IDLE_SETTINGS Settings
BOOLEAN WINAPI Basep8BitStringToDynamicUnicodeString(OUT PUNICODE_STRING UnicodeString, IN LPCSTR String)
BOOL WINAPI GetNamedPipeHandleStateW(HANDLE hNamedPipe, LPDWORD lpState, LPDWORD lpCurInstances, LPDWORD lpMaxCollectionCount, LPDWORD lpCollectDataTimeout, LPWSTR lpUserName, DWORD nMaxUserNameSize)
static LPSTR PULONG lpnSize
#define NMPWAIT_WAIT_FOREVER
static TAGREF LPCWSTR LPDWORD LPVOID lpBuffer
#define FILE_WRITE_THROUGH
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
DWORD BaseSetLastNTError(IN NTSTATUS Status)
NTSYSAPI NTSTATUS NTAPI RtlUnicodeStringToAnsiString(PANSI_STRING DestinationString, PUNICODE_STRING SourceString, BOOLEAN AllocateDestinationString)
NTSTATUS NTAPI NtSetInformationThread(IN HANDLE ThreadHandle, IN THREADINFOCLASS ThreadInformationClass, IN PVOID ThreadInformation, IN ULONG ThreadInformationLength)
#define FSCTL_PIPE_LISTEN
PVOID NTAPI RtlAllocateHeap(IN PVOID HeapHandle, IN ULONG Flags, IN SIZE_T Size)
#define FILE_FLAG_WRITE_THROUGH
BOOL WINAPI CallNamedPipeW(LPCWSTR lpNamedPipeName, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize, LPDWORD lpBytesRead, DWORD nTimeOut)
NTSYSAPI NTSTATUS NTAPI NtOpenFile(OUT PHANDLE phFile, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PIO_STATUS_BLOCK pIoStatusBlock, IN ULONG ShareMode, IN ULONG OpenMode)
_Out_ PCLIENT_ID ClientId
DEBUG_CHANNEL(kernel32file)
BOOL WINAPI SetNamedPipeHandleState(HANDLE hNamedPipe, LPDWORD lpMode, LPDWORD lpMaxCollectionCount, LPDWORD lpCollectDataTimeout)
#define NT_SUCCESS(StatCode)
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
#define PIPE_ACCESS_OUTBOUND
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
#define FILE_PIPE_SERVER_END
#define FILE_READ_ATTRIBUTES
NTSYSAPI BOOLEAN NTAPI RtlCreateUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define FILE_ATTRIBUTE_NORMAL
#define FILE_PIPE_COMPLETE_OPERATION
BOOL WINAPI DisconnectNamedPipe(HANDLE hNamedPipe)
#define FILE_NON_DIRECTORY_FILE
#define FSCTL_PIPE_TRANSCEIVE
#define ConvertWin32AnsiChangeApiToUnicodeApi(obj, name,...)
NTSTATUS NTAPI NtQueryInformationFile(HANDLE hFile, PIO_STATUS_BLOCK io, PVOID ptr, ULONG len, FILE_INFORMATION_CLASS FileInformationClass)
_In_ WDFUSBINTERFACE _In_ UCHAR _Out_opt_ PWDF_USB_PIPE_INFORMATION PipeInfo
BOOL WINAPI TransactNamedPipe(IN HANDLE hNamedPipe, IN LPVOID lpInBuffer, IN DWORD nInBufferSize, OUT LPVOID lpOutBuffer, IN DWORD nOutBufferSize, OUT LPDWORD lpBytesRead OPTIONAL, IN LPOVERLAPPED lpOverlapped OPTIONAL)
BOOL WINAPI CreatePipe(PHANDLE hReadPipe, PHANDLE hWritePipe, LPSECURITY_ATTRIBUTES lpPipeAttributes, DWORD nSize)
_Must_inspect_result_ _In_opt_ WDFKEY _In_ PCUNICODE_STRING _In_ ACCESS_MASK _In_ ULONG CreateOptions
#define FILE_GENERIC_WRITE
#define PIPE_READMODE_MESSAGE
#define InterlockedIncrement
FORCEINLINE struct _TEB * NtCurrentTeb(VOID)
#define STATUS_BUFFER_OVERFLOW
LPVOID lpSecurityDescriptor
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
_In_ HANDLE _In_ DWORD _In_ DWORD _Inout_opt_ LPOVERLAPPED lpOverlapped
NTSYSAPI NTSTATUS NTAPI RtlAnsiStringToUnicodeString(PUNICODE_STRING DestinationString, PANSI_STRING SourceString, BOOLEAN AllocateDestinationString)
#define FILE_PIPE_MESSAGE_MODE
NTSYSAPI NTSTATUS NTAPI RtlAppendUnicodeStringToString(PUNICODE_STRING Destination, PUNICODE_STRING Source)
#define FIELD_OFFSET(t, f)
#define STATUS_OBJECT_NAME_INVALID
#define PIPE_ACCESS_INBOUND
static OUT PIO_STATUS_BLOCK IoStatusBlock
NTSYSAPI BOOLEAN NTAPI RtlPrefixUnicodeString(IN PUNICODE_STRING String1, IN PUNICODE_STRING String2, IN BOOLEAN CaseInSensitive)
#define FILE_PIPE_BYTE_STREAM_MODE
#define FILE_SYNCHRONOUS_IO_NONALERT
NTSTATUS NTAPI NtOpenThreadToken(IN HANDLE ThreadHandle, IN ACCESS_MASK DesiredAccess, IN BOOLEAN OpenAsSelf, OUT PHANDLE TokenHandle)
_In_ PUNICODE_STRING NewName
BOOL WINAPI GetNamedPipeHandleStateA(HANDLE hNamedPipe, LPDWORD lpState, LPDWORD lpCurInstances, LPDWORD lpMaxCollectionCount, LPDWORD lpCollectDataTimeout, LPSTR lpUserName, DWORD nMaxUserNameSize)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define InitializeObjectAttributes(p, n, a, r, s)
#define GetProcAddress(x, y)
#define RtlCopyMemory(Destination, Source, Length)
#define ERROR_PATH_NOT_FOUND
HANDLE WINAPI CreateNamedPipeW(LPCWSTR lpName, DWORD dwOpenMode, DWORD dwPipeMode, DWORD nMaxInstances, DWORD nOutBufferSize, DWORD nInBufferSize, DWORD nDefaultTimeOut, LPSECURITY_ATTRIBUTES lpSecurityAttributes)
#define STATUS_OBJECT_PATH_SYNTAX_BAD
#define FILE_FLAG_OVERLAPPED
NTSTATUS NTAPI NtCreateNamedPipeFile(OUT PHANDLE FileHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PIO_STATUS_BLOCK IoStatusBlock, IN ULONG ShareAccess, IN ULONG CreateDisposition, IN ULONG CreateOptions, IN ULONG NamedPipeType, IN ULONG ReadMode, IN ULONG CompletionMode, IN ULONG MaximumInstances, IN ULONG InboundQuota, IN ULONG OutboundQuota, IN PLARGE_INTEGER DefaultTimeout)
BOOL WINAPI ConnectNamedPipe(IN HANDLE hNamedPipe, IN LPOVERLAPPED lpOverlapped)
BOOL WINAPI PeekNamedPipe(HANDLE hNamedPipe, LPVOID lpBuffer, DWORD nBufferSize, LPDWORD lpBytesRead, LPDWORD lpTotalBytesAvail, LPDWORD lpBytesLeftThisMessage)
NTSYSAPI BOOLEAN NTAPI RtlDosPathNameToNtPathName_U(_In_opt_z_ PCWSTR DosPathName, _Out_ PUNICODE_STRING NtPathName, _Out_opt_ PCWSTR *NtFileNamePart, _Out_opt_ PRTL_RELATIVE_NAME_U DirectoryInfo)
_In_ WDFMEMORY _Out_opt_ size_t * BufferSize
static BOOL NpGetUserNamep(HANDLE hNamedPipe, LPWSTR lpUserName, DWORD nMaxUserNameSize)
#define PIPE_READMODE_BYTE
_Must_inspect_result_ _In_ WDFDMAENABLER _In_ _In_opt_ PWDF_OBJECT_ATTRIBUTES Attributes
NTSYSAPI RTL_PATH_TYPE NTAPI RtlDetermineDosPathNameType_U(_In_ PCWSTR Path)
PULONG MinorVersion OPTIONAL
NTSYSAPI NTSTATUS NTAPI NtWaitForSingleObject(IN HANDLE hObject, IN BOOLEAN bAlertable, IN PLARGE_INTEGER Timeout)