* ntdll.h: Add descriptive comments to special Rtl functions.

(STATUS_OBJECT_PATH_NOT_FOUND): Define.
	(STATUS_BUFFER_OVERFLOW): Define.
	(FILE_SUPERSEDED): Define.
	(FILE_OPENED): Define.
	(FILE_CREATED): Define.
	(FILE_OVERWRITTEN): Define.
	(FILE_EXISTS): Define.
	(FILE_DOES_NOT_EXIST): Define.
	(PIO_APC_ROUTINE): Typedef.
	(NtFsControlFile): Fix parameter types to use PIO_APC_ROUTINE.
	(NtWriteFile): Declare.
	(RtlInt64ToHexUnicodeString): Declare.
	* strfuncs.cc: Include ntdll.h.
	(RtlInt64ToHexUnicodeString): New function.
	* syscalls.cc (try_to_bin): Rewrite using native NT functions.
	Only try to create recycle bin after unsuccessfully trying to move
	file.  Also try to create special files in recycle bin so that Windows
	Explorer isn't unnecessarily stampeded.
This commit is contained in:
Corinna Vinschen
2007-08-12 12:48:02 +00:00
parent 847e89f8e1
commit 61c44b72d4
4 changed files with 296 additions and 76 deletions

View File

@ -12,6 +12,7 @@ details. */
#include "winsup.h"
#include <winbase.h>
#include <winnls.h>
#include <ntdll.h>
codepage_type current_codepage = ansi_cp;
@ -41,3 +42,23 @@ sys_mbstowcs (WCHAR *tgt, const char *src, int len)
int res = MultiByteToWideChar (get_cp (), 0, src, -1, tgt, len);
return res;
}
static WCHAR hex_wchars[] = L"0123456789abcdef";
NTSTATUS NTAPI
RtlInt64ToHexUnicodeString (ULONGLONG value, PUNICODE_STRING dest,
BOOLEAN append)
{
USHORT len = append ? dest->Length : 0;
if (dest->MaximumLength - len < 16 * (int) sizeof (WCHAR))
return STATUS_BUFFER_OVERFLOW;
PWCHAR end = (PWCHAR) ((PBYTE) dest->Buffer + len);
register PWCHAR p = end + 16;
while (p-- > end)
{
*p = hex_wchars[value & 0xf];
value >>= 4;
}
dest->Length += 16 * sizeof (WCHAR);
return STATUS_SUCCESS;
}