* 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:
@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user