3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS kernel
5 * PURPOSE: Security descriptor functions
6 * FILE: lib/rtl/encode.c
7 * PROGRAMMER: KJK::Hyperion <noog@libero.it>
9 * 02/04/2003: created (code contributed by crazylord
10 * <crazyl0rd@minithins.net>)
13 /* INCLUDES *****************************************************************/
15 #include <ddk/ntddk.h>
17 #include <ntdll/ntdll.h>
19 /* FUNCTIONS ***************************************************************/
22 RtlRunDecodeUnicodeString (IN UCHAR Hash
,
23 IN OUT PUNICODE_STRING String
)
28 ptr
= (PUCHAR
)String
->Buffer
;
29 if (String
->Length
> 1)
31 for (i
= String
->Length
; i
> 1; i
--)
33 ptr
[i
- 1] ^= ptr
[i
- 2] ^ Hash
;
37 if (String
->Length
>= 1)
39 ptr
[0] ^= Hash
| (UCHAR
)0x43;
45 RtlRunEncodeUnicodeString (IN OUT PUCHAR Hash
,
46 IN OUT PUNICODE_STRING String
)
48 LARGE_INTEGER CurrentTime
;
53 ptr
= (PUCHAR
) String
->Buffer
;
56 Status
= NtQuerySystemTime (&CurrentTime
);
57 if (NT_SUCCESS(Status
))
59 for (i
= 1; i
< sizeof(LARGE_INTEGER
) && (*Hash
== 0); i
++)
60 *Hash
|= *(PUCHAR
)(((PUCHAR
)&CurrentTime
) + i
);
67 if (String
->Length
>= 1)
69 ptr
[0] ^= (*Hash
) | (UCHAR
)0x43;
70 if (String
->Length
> 1)
72 for (i
= 1; i
< String
->Length
; i
++)
74 ptr
[i
] ^= ptr
[i
- 1] ^ (*Hash
);