00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
#include "cmp.h"
00030
#include <stdio.h>
00031
#include <stdlib.h>
00032
#include <string.h>
00033
00034
void
00035 __cdecl
main(
00036
int argc,
00037
char *argv[]
00038 )
00039 {
00040
NTSTATUS Status;
00041 OBJECT_ATTRIBUTES
ObjectAttributes;
00042 UNICODE_STRING
KeyName;
00043 UNICODE_STRING LinkName;
00044 UNICODE_STRING NullName;
00045 ANSI_STRING AnsiKeyName;
00046 ANSI_STRING AnsiLinkName;
00047 HANDLE KeyHandle;
00048
00049
00050
00051
00052
00053
if (argc != 3) {
00054 printf(
"Usage: %s <KeyPath> <SymLink>\n",argv[0]);
00055
exit(1);
00056 }
00057
00058
RtlInitAnsiString(&AnsiKeyName, argv[1]);
00059
Status =
RtlAnsiStringToUnicodeString(&
KeyName, &AnsiKeyName,
TRUE);
00060
if (!
NT_SUCCESS(
Status)) {
00061 printf(
"RtlAnsiStringToUnicodeString failed %lx\n",
Status);
00062
exit(1);
00063 }
00064
00065
RtlInitAnsiString(&AnsiLinkName, argv[2]);
00066
Status =
RtlAnsiStringToUnicodeString(&LinkName, &AnsiLinkName,
TRUE);
00067
if (!
NT_SUCCESS(
Status)) {
00068 printf(
"RtlAnsiStringToUnicodeString failed %lx\n",
Status);
00069
exit(1);
00070 }
00071
00072 printf(
"rtsetsec: starting\n");
00073
00074
00075
00076
00077
00078 InitializeObjectAttributes(
00079 &
ObjectAttributes,
00080 &
KeyName,
00081 OBJ_CASE_INSENSITIVE,
00082 (HANDLE)
NULL,
00083
NULL
00084 );
00085
00086
Status =
NtCreateKey(&KeyHandle,
00087 KEY_READ | KEY_WRITE,
00088 &
ObjectAttributes,
00089 0,
00090
NULL,
00091 0,
00092
NULL);
00093
if (!
NT_SUCCESS(
Status)) {
00094 printf(
"rtsymlnk: NtCreateKey failed: %08lx\n",
Status);
00095
exit(1);
00096 }
00097
00098 NullName.Length = NullName.MaximumLength = 0;
00099 NullName.Buffer =
NULL;
00100
00101
Status =
NtSetValueKey(KeyHandle,
00102 &NullName,
00103 0,
00104 REG_LINK,
00105 LinkName.Buffer,
00106 LinkName.Length);
00107
if (!
NT_SUCCESS(
Status)) {
00108 printf(
"rtsymlnk: NtSetValueKey failed: %08lx\n",
Status);
00109
exit(1);
00110 }
00111
00112
Status =
NtClose(KeyHandle);
00113
if (!
NT_SUCCESS(
Status)) {
00114 printf(
"rtsymlnk: NtClose failed: %08lx\n",
Status);
00115
exit(1);
00116 }
00117
00118 printf(
"rtsymlnk: successful\n");
00119 }