mirror of
https://github.com/reactos/reactos.git
synced 2024-10-24 23:11:33 +00:00
Correctly open the registry when using MOVEFILE_DELAY_UNTIL_REBOOT
svn path=/trunk/; revision=20444
This commit is contained in:
parent
980dfd8109
commit
864361fafc
|
@ -72,14 +72,12 @@ static BOOL add_boot_rename_entry( LPCWSTR source, LPCWSTR dest, DWORD flags )
|
||||||
static const WCHAR ValueName[] = {'P','e','n','d','i','n','g',
|
static const WCHAR ValueName[] = {'P','e','n','d','i','n','g',
|
||||||
'F','i','l','e','R','e','n','a','m','e',
|
'F','i','l','e','R','e','n','a','m','e',
|
||||||
'O','p','e','r','a','t','i','o','n','s',0};
|
'O','p','e','r','a','t','i','o','n','s',0};
|
||||||
static const WCHAR SessionW[] = {'M','a','c','h','i','n','e','\\',
|
|
||||||
'S','y','s','t','e','m','\\',
|
UNICODE_STRING KeyName = RTL_CONSTANT_STRING(L"\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Control\\Session Manager");
|
||||||
'C','u','r','r','e','n','t','C','o','n','t','r','o','l','S','e','t','\\',
|
|
||||||
'C','o','n','t','r','o','l','\\',
|
|
||||||
'S','e','s','s','i','o','n',' ','M','a','n','a','g','e','r',0};
|
|
||||||
static const int info_size = FIELD_OFFSET( KEY_VALUE_PARTIAL_INFORMATION, Data );
|
static const int info_size = FIELD_OFFSET( KEY_VALUE_PARTIAL_INFORMATION, Data );
|
||||||
|
|
||||||
OBJECT_ATTRIBUTES attr;
|
OBJECT_ATTRIBUTES ObjectAttributes;
|
||||||
UNICODE_STRING nameW, source_name, dest_name;
|
UNICODE_STRING nameW, source_name, dest_name;
|
||||||
KEY_VALUE_PARTIAL_INFORMATION *info;
|
KEY_VALUE_PARTIAL_INFORMATION *info;
|
||||||
BOOL rc = FALSE;
|
BOOL rc = FALSE;
|
||||||
|
@ -88,6 +86,7 @@ static BOOL add_boot_rename_entry( LPCWSTR source, LPCWSTR dest, DWORD flags )
|
||||||
DWORD DataSize = 0;
|
DWORD DataSize = 0;
|
||||||
BYTE *Buffer = NULL;
|
BYTE *Buffer = NULL;
|
||||||
WCHAR *p;
|
WCHAR *p;
|
||||||
|
NTSTATUS Status;
|
||||||
|
|
||||||
DPRINT("Add support to smss for keys created by MOVEFILE_DELAY_UNTIL_REBOOT\n");
|
DPRINT("Add support to smss for keys created by MOVEFILE_DELAY_UNTIL_REBOOT\n");
|
||||||
|
|
||||||
|
@ -104,18 +103,30 @@ static BOOL add_boot_rename_entry( LPCWSTR source, LPCWSTR dest, DWORD flags )
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
attr.Length = sizeof(attr);
|
InitializeObjectAttributes(&ObjectAttributes,
|
||||||
attr.RootDirectory = 0;
|
&KeyName,
|
||||||
attr.ObjectName = &nameW;
|
OBJ_CASE_INSENSITIVE,
|
||||||
attr.Attributes = 0;
|
NULL,
|
||||||
attr.SecurityDescriptor = NULL;
|
NULL);
|
||||||
attr.SecurityQualityOfService = NULL;
|
|
||||||
RtlInitUnicodeString( &nameW, SessionW );
|
|
||||||
|
|
||||||
if (NtCreateKey( &Reboot, KEY_ALL_ACCESS, &attr, 0, NULL, 0, NULL ) != STATUS_SUCCESS)
|
Status = NtOpenKey(&Reboot,
|
||||||
|
KEY_ALL_ACCESS,
|
||||||
|
&ObjectAttributes);
|
||||||
|
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
DPRINT1("Error creating key for reboot managment [%s]\n",
|
Status = NtCreateKey(&Reboot,
|
||||||
"SYSTEM\\CurrentControlSet\\Control\\Session Manager");
|
KEY_ALL_ACCESS,
|
||||||
|
&ObjectAttributes,
|
||||||
|
0,
|
||||||
|
NULL,
|
||||||
|
REG_OPTION_NON_VOLATILE,
|
||||||
|
NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
DPRINT1("NtCreateKey() failed (Status %lx)\n", Status);
|
||||||
RtlFreeUnicodeString( &source_name );
|
RtlFreeUnicodeString( &source_name );
|
||||||
RtlFreeUnicodeString( &dest_name );
|
RtlFreeUnicodeString( &dest_name );
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
Loading…
Reference in a new issue