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 #define WORK_SIZE 1024
00035
00036
void __cdecl
main(
int,
char *);
00037
void processargs();
00038
00039
void
00040
Delete(
00041 HANDLE Handle
00042 );
00043
00044 UNICODE_STRING
WorkName;
00045 WCHAR
workbuffer[
WORK_SIZE];
00046
00047 UNICODE_STRING
ValueName;
00048 WCHAR
valuebuffer[
WORK_SIZE];
00049
00050 UNICODE_STRING
NewValueName;
00051 WCHAR
newvaluebuffer[
WORK_SIZE];
00052
00053
void
00054 __cdecl
main(
00055
int argc,
00056
char *argv[]
00057 )
00058 {
00059
NTSTATUS status;
00060 OBJECT_ATTRIBUTES
ObjectAttributes;
00061 HANDLE BaseHandle;
00062
00063
00064
00065
00066
00067
WorkName.MaximumLength =
WORK_SIZE;
00068
WorkName.Length = 0
L;
00069
WorkName.Buffer = &(
workbuffer[0]);
00070
00071
00072
ValueName.MaximumLength =
WORK_SIZE;
00073
ValueName.Length = 0
L;
00074
ValueName.Buffer = &(
valuebuffer[0]);
00075
00076
NewValueName.MaximumLength =
WORK_SIZE;
00077
NewValueName.Length = 0
L;
00078
NewValueName.Buffer = &(
newvaluebuffer[0]);
00079
00080
processargs(argc, argv);
00081
00082
00083
00084
00085
00086 printf(
"rtrenval: starting\n");
00087
00088 InitializeObjectAttributes(
00089 &
ObjectAttributes,
00090 &
WorkName,
00091 0,
00092 (HANDLE)
NULL,
00093
NULL
00094 );
00095
ObjectAttributes.Attributes |= OBJ_CASE_INSENSITIVE;
00096
00097 status =
NtOpenKey(
00098 &BaseHandle,
00099 KEY_SET_VALUE,
00100 &
ObjectAttributes
00101 );
00102
if (!
NT_SUCCESS(status)) {
00103 printf(
"rtrenval: t0: %08lx\n", status);
00104
exit(1);
00105 }
00106
00107 NtRenameValueKey(
00108 BaseHandle,
00109 &
ValueName,
00110 &
NewValueName,
00111 42
00112 );
00113
00114
if (!
NT_SUCCESS(status)) {
00115 printf(
"rtrenval: t1: %08lx\n", status);
00116
exit(1);
00117 }
00118
00119
NtClose(BaseHandle);
00120
exit(0);
00121 }
00122
00123
void
00124 processargs(
00125
int argc,
00126
char *argv[]
00127 )
00128 {
00129 ANSI_STRING temp;
00130
00131
if ( (argc != 4) )
00132 {
00133 printf(
"Usage: %s <KeyPath> <old value entry name> <new value entry name>\n",
00134 argv[0]);
00135
exit(1);
00136 }
00137
00138
RtlInitAnsiString(
00139 &temp,
00140 argv[1]
00141 );
00142
00143
RtlAnsiStringToUnicodeString(
00144 &
WorkName,
00145 &temp,
00146
TRUE
00147 );
00148
00149
RtlInitAnsiString(
00150 &temp,
00151 argv[2]
00152 );
00153
00154
RtlAnsiStringToUnicodeString(
00155 &
ValueName,
00156 &temp,
00157
TRUE
00158 );
00159
00160
RtlInitAnsiString(
00161 &temp,
00162 argv[3]
00163 );
00164
00165
RtlAnsiStringToUnicodeString(
00166 &
NewValueName,
00167 &temp,
00168
TRUE
00169 );
00170
00171
return;
00172 }