mirror of
https://github.com/reactos/reactos.git
synced 2025-01-04 05:20:54 +00:00
[NPFS-NEW]: Activate NPFS-NEW. Let's see what happens.
svn path=/trunk/; revision=60072
This commit is contained in:
parent
384e5d6f11
commit
d6b7cc394d
3 changed files with 6 additions and 141 deletions
|
@ -14,8 +14,6 @@
|
|||
#include <debug.h>
|
||||
DEBUG_CHANNEL(kernel32file);
|
||||
|
||||
//#define USING_PROPER_NPFS_WAIT_SEMANTICS
|
||||
|
||||
/* GLOBALS ********************************************************************/
|
||||
|
||||
LONG ProcessPipeId;
|
||||
|
@ -151,7 +149,6 @@ CreateNamedPipeA(LPCSTR lpName,
|
|||
lpSecurityAttributes);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
|
@ -339,7 +336,6 @@ CreateNamedPipeW(LPCWSTR lpName,
|
|||
return PipeHandle;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
|
@ -364,17 +360,6 @@ WaitNamedPipeA(LPCSTR lpNamedPipeName,
|
|||
return r;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* When NPFS will work properly, use this code instead. It is compatible with
|
||||
* Microsoft's NPFS.SYS. The main difference is that:
|
||||
* - This code actually respects the timeout instead of ignoring it!
|
||||
* - This code validates and creates the proper names for both UNC and local pipes
|
||||
* - On NT, you open the *root* pipe directory (either \DosDevices\Pipe or
|
||||
* \DosDevices\Unc\Server\Pipe) and then send the pipe to wait on in the
|
||||
* FILE_PIPE_WAIT_FOR_BUFFER structure.
|
||||
*/
|
||||
#ifdef USING_PROPER_NPFS_WAIT_SEMANTICS
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
|
@ -559,96 +544,6 @@ WaitNamedPipeW(LPCWSTR lpNamedPipeName,
|
|||
/* Success */
|
||||
return TRUE;
|
||||
}
|
||||
#else
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
BOOL
|
||||
WINAPI
|
||||
WaitNamedPipeW(LPCWSTR lpNamedPipeName,
|
||||
DWORD nTimeOut)
|
||||
{
|
||||
UNICODE_STRING NamedPipeName;
|
||||
NTSTATUS Status;
|
||||
OBJECT_ATTRIBUTES ObjectAttributes;
|
||||
FILE_PIPE_WAIT_FOR_BUFFER WaitPipe;
|
||||
HANDLE FileHandle;
|
||||
IO_STATUS_BLOCK Iosb;
|
||||
|
||||
if (RtlDosPathNameToNtPathName_U(lpNamedPipeName,
|
||||
&NamedPipeName,
|
||||
NULL,
|
||||
NULL) == FALSE)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
InitializeObjectAttributes(&ObjectAttributes,
|
||||
&NamedPipeName,
|
||||
OBJ_CASE_INSENSITIVE,
|
||||
NULL,
|
||||
NULL);
|
||||
Status = NtOpenFile(&FileHandle,
|
||||
FILE_READ_ATTRIBUTES | SYNCHRONIZE,
|
||||
&ObjectAttributes,
|
||||
&Iosb,
|
||||
FILE_SHARE_READ | FILE_SHARE_WRITE,
|
||||
FILE_SYNCHRONOUS_IO_NONALERT);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
BaseSetLastNTError(Status);
|
||||
RtlFreeUnicodeString(&NamedPipeName);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* Check what timeout we got */
|
||||
if (nTimeOut == NMPWAIT_WAIT_FOREVER)
|
||||
{
|
||||
/* Don't use a timeout */
|
||||
WaitPipe.TimeoutSpecified = FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Check if default */
|
||||
if (nTimeOut == NMPWAIT_USE_DEFAULT_WAIT)
|
||||
{
|
||||
/* Set it to 0 */
|
||||
WaitPipe.Timeout.LowPart = 0;
|
||||
WaitPipe.Timeout.HighPart = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Convert to NT format */
|
||||
WaitPipe.Timeout.QuadPart = UInt32x32To64(-10000, nTimeOut);
|
||||
}
|
||||
|
||||
/* In both cases, we do have a timeout */
|
||||
WaitPipe.TimeoutSpecified = TRUE;
|
||||
}
|
||||
|
||||
Status = NtFsControlFile(FileHandle,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
&Iosb,
|
||||
FSCTL_PIPE_WAIT,
|
||||
&WaitPipe,
|
||||
sizeof(WaitPipe),
|
||||
NULL,
|
||||
0);
|
||||
NtClose(FileHandle);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
BaseSetLastNTError(Status);
|
||||
RtlFreeUnicodeString(&NamedPipeName);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
RtlFreeUnicodeString(&NamedPipeName);
|
||||
return TRUE;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
|
@ -1305,7 +1200,6 @@ TransactNamedPipe(IN HANDLE hNamedPipe,
|
|||
}
|
||||
else
|
||||
{
|
||||
#if 0 /* We don't implement FSCTL_PIPE_TRANSCEIVE yet */
|
||||
IO_STATUS_BLOCK Iosb;
|
||||
|
||||
Status = NtFsControlFile(hNamedPipe,
|
||||
|
@ -1339,34 +1233,6 @@ TransactNamedPipe(IN HANDLE hNamedPipe,
|
|||
BaseSetLastNTError(Status);
|
||||
return FALSE;
|
||||
}
|
||||
#else /* Workaround while FSCTL_PIPE_TRANSCEIVE not available */
|
||||
DWORD nActualBytes;
|
||||
|
||||
while (0 != nInBufferSize &&
|
||||
WriteFile(hNamedPipe, lpInBuffer, nInBufferSize, &nActualBytes,
|
||||
NULL))
|
||||
{
|
||||
lpInBuffer = (LPVOID)((char *) lpInBuffer + nActualBytes);
|
||||
nInBufferSize -= nActualBytes;
|
||||
}
|
||||
|
||||
if (0 != nInBufferSize)
|
||||
{
|
||||
/* Must have dropped out of the while 'cause WriteFile failed */
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (!ReadFile(hNamedPipe, lpOutBuffer, nOutBufferSize, &nActualBytes,
|
||||
NULL))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (NULL != lpBytesRead)
|
||||
{
|
||||
*lpBytesRead = nActualBytes;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
|
|
|
@ -6,6 +6,5 @@ add_subdirectory(fastfat)
|
|||
add_subdirectory(fs_rec)
|
||||
add_subdirectory(msfs)
|
||||
add_subdirectory(mup)
|
||||
add_subdirectory(npfs)
|
||||
add_subdirectory(npfs_new)
|
||||
add_subdirectory(ntfs)
|
||||
|
|
|
@ -21,9 +21,9 @@ list(APPEND SOURCE
|
|||
write.c
|
||||
writesup.c)
|
||||
|
||||
add_library(npfs_new SHARED ${SOURCE})
|
||||
set_module_type(npfs_new kernelmodedriver)
|
||||
target_link_libraries(npfs_new ${PSEH_LIB})
|
||||
add_importlibs(npfs_new ntoskrnl hal)
|
||||
add_pch(npfs_new npfs.h)
|
||||
add_cd_file(TARGET npfs_new DESTINATION reactos/system32/drivers FOR all)
|
||||
add_library(npfs SHARED ${SOURCE})
|
||||
set_module_type(npfs kernelmodedriver)
|
||||
target_link_libraries(npfs ${PSEH_LIB})
|
||||
add_importlibs(npfs ntoskrnl hal)
|
||||
add_pch(npfs npfs.h)
|
||||
add_cd_file(TARGET npfs DESTINATION reactos/system32/drivers FOR all)
|
||||
|
|
Loading…
Reference in a new issue