mirror of
https://github.com/reactos/reactos.git
synced 2025-08-02 00:03:22 +00:00
- Get rid of OB_ROS_PARSE_METHOD and use OB_PARSE_METHOD instead. Hacked the current parse methods to keep using a PWSTR, however they should be modified to use the UNICODE_STRING instead...
svn path=/trunk/; revision=22036
This commit is contained in:
parent
c5b6c41bf9
commit
1bb8f22330
12 changed files with 92 additions and 59 deletions
|
@ -10,7 +10,7 @@ typedef struct _W32_CALLOUT_DATA
|
||||||
OB_OPEN_METHOD DesktopOpen;
|
OB_OPEN_METHOD DesktopOpen;
|
||||||
OB_DELETE_METHOD DesktopDelete;
|
OB_DELETE_METHOD DesktopDelete;
|
||||||
OB_DELETE_METHOD WinStaDelete;
|
OB_DELETE_METHOD WinStaDelete;
|
||||||
OB_ROS_PARSE_METHOD WinStaParse;
|
OB_PARSE_METHOD WinStaParse;
|
||||||
OB_OPEN_METHOD WinStaOpen;
|
OB_OPEN_METHOD WinStaOpen;
|
||||||
OB_ROS_FIND_METHOD WinStaFind;
|
OB_ROS_FIND_METHOD WinStaFind;
|
||||||
OB_ROS_CREATE_METHOD DesktopCreate;
|
OB_ROS_CREATE_METHOD DesktopCreate;
|
||||||
|
|
|
@ -439,10 +439,15 @@ CmUnRegisterCallback(IN LARGE_INTEGER Cookie);
|
||||||
|
|
||||||
NTSTATUS STDCALL
|
NTSTATUS STDCALL
|
||||||
CmiObjectParse(IN PVOID ParsedObject,
|
CmiObjectParse(IN PVOID ParsedObject,
|
||||||
OUT PVOID *NextObject,
|
IN PVOID ObjectType,
|
||||||
IN PUNICODE_STRING FullPath,
|
IN OUT PACCESS_STATE AccessState,
|
||||||
IN OUT PWSTR *Path,
|
IN KPROCESSOR_MODE AccessMode,
|
||||||
IN ULONG Attribute);
|
IN ULONG Attributes,
|
||||||
|
IN OUT PUNICODE_STRING FullPath,
|
||||||
|
IN OUT PUNICODE_STRING RemainingName,
|
||||||
|
IN OUT PVOID Context OPTIONAL,
|
||||||
|
IN PSECURITY_QUALITY_OF_SERVICE SecurityQos OPTIONAL,
|
||||||
|
OUT PVOID *NextObject);
|
||||||
|
|
||||||
VOID STDCALL
|
VOID STDCALL
|
||||||
CmiObjectDelete(PVOID DeletedObject);
|
CmiObjectDelete(PVOID DeletedObject);
|
||||||
|
|
|
@ -369,7 +369,7 @@ CmInitializeRegistry(VOID)
|
||||||
ObjectTypeInitializer.ValidAccessMask = KEY_ALL_ACCESS;
|
ObjectTypeInitializer.ValidAccessMask = KEY_ALL_ACCESS;
|
||||||
ObjectTypeInitializer.UseDefaultObject = TRUE;
|
ObjectTypeInitializer.UseDefaultObject = TRUE;
|
||||||
ObjectTypeInitializer.DeleteProcedure = CmiObjectDelete;
|
ObjectTypeInitializer.DeleteProcedure = CmiObjectDelete;
|
||||||
ObjectTypeInitializer.ParseProcedure = (PVOID)CmiObjectParse;
|
ObjectTypeInitializer.ParseProcedure = CmiObjectParse;
|
||||||
ObjectTypeInitializer.SecurityProcedure = CmiObjectSecurity;
|
ObjectTypeInitializer.SecurityProcedure = CmiObjectSecurity;
|
||||||
ObjectTypeInitializer.QueryNameProcedure = CmiObjectQueryName;
|
ObjectTypeInitializer.QueryNameProcedure = CmiObjectQueryName;
|
||||||
|
|
||||||
|
|
|
@ -24,12 +24,18 @@ CmiGetLinkTarget(PREGISTRY_HIVE RegistryHive,
|
||||||
|
|
||||||
/* FUNCTONS *****************************************************************/
|
/* FUNCTONS *****************************************************************/
|
||||||
|
|
||||||
|
|
||||||
NTSTATUS STDCALL
|
NTSTATUS STDCALL
|
||||||
CmiObjectParse(PVOID ParsedObject,
|
CmiObjectParse(IN PVOID ParsedObject,
|
||||||
PVOID *NextObject,
|
IN PVOID ObjectType,
|
||||||
PUNICODE_STRING FullPath,
|
IN OUT PACCESS_STATE AccessState,
|
||||||
PWSTR *Path,
|
IN KPROCESSOR_MODE AccessMode,
|
||||||
ULONG Attributes)
|
IN ULONG Attributes,
|
||||||
|
IN OUT PUNICODE_STRING FullPath,
|
||||||
|
IN OUT PUNICODE_STRING RemainingName,
|
||||||
|
IN OUT PVOID Context OPTIONAL,
|
||||||
|
IN PSECURITY_QUALITY_OF_SERVICE SecurityQos OPTIONAL,
|
||||||
|
OUT PVOID *NextObject)
|
||||||
{
|
{
|
||||||
BLOCK_OFFSET BlockOffset;
|
BLOCK_OFFSET BlockOffset;
|
||||||
PKEY_OBJECT FoundObject;
|
PKEY_OBJECT FoundObject;
|
||||||
|
@ -42,6 +48,7 @@ CmiObjectParse(PVOID ParsedObject,
|
||||||
UNICODE_STRING LinkPath;
|
UNICODE_STRING LinkPath;
|
||||||
UNICODE_STRING TargetPath;
|
UNICODE_STRING TargetPath;
|
||||||
UNICODE_STRING KeyName;
|
UNICODE_STRING KeyName;
|
||||||
|
PWSTR *Path = &RemainingName->Buffer;
|
||||||
|
|
||||||
ParsedKey = ParsedObject;
|
ParsedKey = ParsedObject;
|
||||||
|
|
||||||
|
|
|
@ -36,7 +36,7 @@ static GENERIC_MAPPING ExpDesktopMapping =
|
||||||
};
|
};
|
||||||
|
|
||||||
OB_OPEN_METHOD ExpWindowStationObjectOpen = NULL;
|
OB_OPEN_METHOD ExpWindowStationObjectOpen = NULL;
|
||||||
OB_ROS_PARSE_METHOD ExpWindowStationObjectParse = NULL;
|
OB_PARSE_METHOD ExpWindowStationObjectParse = NULL;
|
||||||
OB_DELETE_METHOD ExpWindowStationObjectDelete = NULL;
|
OB_DELETE_METHOD ExpWindowStationObjectDelete = NULL;
|
||||||
OB_ROS_FIND_METHOD ExpWindowStationObjectFind = NULL;
|
OB_ROS_FIND_METHOD ExpWindowStationObjectFind = NULL;
|
||||||
OB_ROS_CREATE_METHOD ExpDesktopObjectCreate = NULL;
|
OB_ROS_CREATE_METHOD ExpDesktopObjectCreate = NULL;
|
||||||
|
@ -82,20 +82,28 @@ ExpWinStaObjectFind(PVOID WinStaObject,
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
STDCALL
|
STDCALL
|
||||||
ExpWinStaObjectParse(PVOID Object,
|
ExpWinStaObjectParse(IN PVOID ParseObject,
|
||||||
PVOID *NextObject,
|
IN PVOID ObjectType,
|
||||||
PUNICODE_STRING FullPath,
|
IN OUT PACCESS_STATE AccessState,
|
||||||
PWSTR *Path,
|
IN KPROCESSOR_MODE AccessMode,
|
||||||
ULONG Attributes,
|
IN ULONG Attributes,
|
||||||
POBP_LOOKUP_CONTEXT Context)
|
IN OUT PUNICODE_STRING CompleteName,
|
||||||
|
IN OUT PUNICODE_STRING RemainingName,
|
||||||
|
IN OUT PVOID Context OPTIONAL,
|
||||||
|
IN PSECURITY_QUALITY_OF_SERVICE SecurityQos OPTIONAL,
|
||||||
|
OUT PVOID *Object)
|
||||||
{
|
{
|
||||||
/* Call the Registered Callback */
|
/* Call the Registered Callback */
|
||||||
return ExpWindowStationObjectParse(Object,
|
return ExpWindowStationObjectParse(ParseObject,
|
||||||
NextObject,
|
ObjectType,
|
||||||
FullPath,
|
AccessState,
|
||||||
Path,
|
AccessMode,
|
||||||
Attributes,
|
Attributes,
|
||||||
Context);
|
CompleteName,
|
||||||
|
RemainingName,
|
||||||
|
Context,
|
||||||
|
SecurityQos,
|
||||||
|
Object);
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
|
|
@ -60,16 +60,6 @@ typedef PVOID
|
||||||
ULONG Attributes
|
ULONG Attributes
|
||||||
);
|
);
|
||||||
|
|
||||||
typedef NTSTATUS
|
|
||||||
(NTAPI *OB_ROS_PARSE_METHOD)(
|
|
||||||
PVOID Object,
|
|
||||||
PVOID *NextObject,
|
|
||||||
PUNICODE_STRING FullPath,
|
|
||||||
PWSTR *Path,
|
|
||||||
ULONG Attributes,
|
|
||||||
POBP_LOOKUP_CONTEXT Context
|
|
||||||
);
|
|
||||||
|
|
||||||
BOOLEAN
|
BOOLEAN
|
||||||
NTAPI
|
NTAPI
|
||||||
ObpDeleteEntryDirectory(POBP_LOOKUP_CONTEXT Context);
|
ObpDeleteEntryDirectory(POBP_LOOKUP_CONTEXT Context);
|
||||||
|
|
|
@ -37,6 +37,7 @@ ObFindObject(POBJECT_CREATE_INFORMATION ObjectCreateInfo,
|
||||||
PWSTR current;
|
PWSTR current;
|
||||||
UNICODE_STRING PathString;
|
UNICODE_STRING PathString;
|
||||||
ULONG Attributes;
|
ULONG Attributes;
|
||||||
|
UNICODE_STRING CurrentUs;
|
||||||
|
|
||||||
PAGED_CODE();
|
PAGED_CODE();
|
||||||
|
|
||||||
|
@ -169,12 +170,19 @@ Next:
|
||||||
DPRINT("Current object can't parse\n");
|
DPRINT("Current object can't parse\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
Status = ((OB_ROS_PARSE_METHOD)CurrentHeader->Type->TypeInfo.ParseProcedure)(CurrentObject,
|
|
||||||
&NextObject,
|
RtlInitUnicodeString(&CurrentUs, current);
|
||||||
&PathString,
|
Status = CurrentHeader->Type->TypeInfo.ParseProcedure(CurrentObject,
|
||||||
¤t,
|
CurrentHeader->Type,
|
||||||
|
NULL,
|
||||||
|
ExGetPreviousMode(),
|
||||||
Attributes,
|
Attributes,
|
||||||
Context);
|
&PathString,
|
||||||
|
&CurrentUs,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
&NextObject);
|
||||||
|
current = CurrentUs.Buffer;
|
||||||
if (Status == STATUS_REPARSE)
|
if (Status == STATUS_REPARSE)
|
||||||
{
|
{
|
||||||
/* reparse the object path */
|
/* reparse the object path */
|
||||||
|
|
|
@ -86,16 +86,22 @@ ObpDeleteSymbolicLink(PVOID ObjectBody)
|
||||||
*--*/
|
*--*/
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
ObpParseSymbolicLink(PVOID Object,
|
ObpParseSymbolicLink(IN PVOID ParsedObject,
|
||||||
PVOID * NextObject,
|
IN PVOID ObjectType,
|
||||||
PUNICODE_STRING FullPath,
|
IN OUT PACCESS_STATE AccessState,
|
||||||
PWSTR * RemainingPath,
|
IN KPROCESSOR_MODE AccessMode,
|
||||||
ULONG Attributes)
|
IN ULONG Attributes,
|
||||||
|
IN OUT PUNICODE_STRING FullPath,
|
||||||
|
IN OUT PUNICODE_STRING RemainingName,
|
||||||
|
IN OUT PVOID Context OPTIONAL,
|
||||||
|
IN PSECURITY_QUALITY_OF_SERVICE SecurityQos OPTIONAL,
|
||||||
|
OUT PVOID *NextObject)
|
||||||
{
|
{
|
||||||
POBJECT_SYMBOLIC_LINK SymlinkObject = (POBJECT_SYMBOLIC_LINK)Object;
|
POBJECT_SYMBOLIC_LINK SymlinkObject = (POBJECT_SYMBOLIC_LINK)ParsedObject;
|
||||||
PUNICODE_STRING TargetPath;
|
PUNICODE_STRING TargetPath;
|
||||||
PWSTR NewTargetPath;
|
PWSTR NewTargetPath;
|
||||||
ULONG LengthUsed, MaximumLength, RemainLength;
|
ULONG LengthUsed, MaximumLength, RemainLength;
|
||||||
|
PWSTR *RemainingPath = &RemainingName->Buffer;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Stop parsing if the entire path has been parsed and
|
* Stop parsing if the entire path has been parsed and
|
||||||
|
@ -186,7 +192,7 @@ ObInitSymbolicLinkImplementation(VOID)
|
||||||
ObjectTypeInitializer.PoolType = NonPagedPool;
|
ObjectTypeInitializer.PoolType = NonPagedPool;
|
||||||
ObjectTypeInitializer.ValidAccessMask = SYMBOLIC_LINK_ALL_ACCESS;
|
ObjectTypeInitializer.ValidAccessMask = SYMBOLIC_LINK_ALL_ACCESS;
|
||||||
ObjectTypeInitializer.UseDefaultObject = TRUE;
|
ObjectTypeInitializer.UseDefaultObject = TRUE;
|
||||||
ObjectTypeInitializer.ParseProcedure = (OB_PARSE_METHOD)ObpParseSymbolicLink;
|
ObjectTypeInitializer.ParseProcedure = ObpParseSymbolicLink;
|
||||||
ObjectTypeInitializer.DeleteProcedure = ObpDeleteSymbolicLink;
|
ObjectTypeInitializer.DeleteProcedure = ObpDeleteSymbolicLink;
|
||||||
ObpCreateTypeObject(&ObjectTypeInitializer, &Name, &ObSymbolicLinkType);
|
ObpCreateTypeObject(&ObjectTypeInitializer, &Name, &ObSymbolicLinkType);
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,7 @@ static PKWIN32_PROCESS_CALLOUT PspWin32ProcessCallback = NULL;
|
||||||
static PKWIN32_THREAD_CALLOUT PspWin32ThreadCallback = NULL;
|
static PKWIN32_THREAD_CALLOUT PspWin32ThreadCallback = NULL;
|
||||||
|
|
||||||
extern OB_OPEN_METHOD ExpWindowStationObjectOpen;
|
extern OB_OPEN_METHOD ExpWindowStationObjectOpen;
|
||||||
extern OB_ROS_PARSE_METHOD ExpWindowStationObjectParse;
|
extern OB_PARSE_METHOD ExpWindowStationObjectParse;
|
||||||
extern OB_DELETE_METHOD ExpWindowStationObjectDelete;
|
extern OB_DELETE_METHOD ExpWindowStationObjectDelete;
|
||||||
extern OB_ROS_FIND_METHOD ExpWindowStationObjectFind;
|
extern OB_ROS_FIND_METHOD ExpWindowStationObjectFind;
|
||||||
extern OB_ROS_CREATE_METHOD ExpDesktopObjectCreate;
|
extern OB_ROS_CREATE_METHOD ExpDesktopObjectCreate;
|
||||||
|
|
|
@ -70,12 +70,16 @@ IntWinStaObjectFind(PVOID Object,
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
STDCALL
|
STDCALL
|
||||||
IntWinStaObjectParse(PVOID Object,
|
IntWinStaObjectParse(IN PVOID ParseObject,
|
||||||
PVOID *NextObject,
|
IN PVOID ObjectType,
|
||||||
PUNICODE_STRING FullPath,
|
IN OUT PACCESS_STATE AccessState,
|
||||||
PWSTR *Path,
|
IN KPROCESSOR_MODE AccessMode,
|
||||||
ULONG Attributes,
|
IN ULONG Attributes,
|
||||||
PVOID Context);
|
IN OUT PUNICODE_STRING CompleteName,
|
||||||
|
IN OUT PUNICODE_STRING RemainingName,
|
||||||
|
IN OUT PVOID Context OPTIONAL,
|
||||||
|
IN PSECURITY_QUALITY_OF_SERVICE SecurityQos OPTIONAL,
|
||||||
|
OUT PVOID *Object);
|
||||||
|
|
||||||
NTSTATUS FASTCALL
|
NTSTATUS FASTCALL
|
||||||
IntValidateWindowStationHandle(
|
IntValidateWindowStationHandle(
|
||||||
|
|
|
@ -382,7 +382,7 @@ DriverEntry (
|
||||||
* Register Object Manager Callbacks
|
* Register Object Manager Callbacks
|
||||||
*/
|
*/
|
||||||
CalloutData.WinStaOpen = IntWinStaObjectOpen;
|
CalloutData.WinStaOpen = IntWinStaObjectOpen;
|
||||||
CalloutData.WinStaParse = (OB_ROS_PARSE_METHOD)IntWinStaObjectParse;
|
CalloutData.WinStaParse = IntWinStaObjectParse;
|
||||||
CalloutData.WinStaDelete = IntWinStaObjectDelete;
|
CalloutData.WinStaDelete = IntWinStaObjectDelete;
|
||||||
CalloutData.WinStaFind = IntWinStaObjectFind;
|
CalloutData.WinStaFind = IntWinStaObjectFind;
|
||||||
CalloutData.DesktopCreate = IntDesktopObjectCreate;
|
CalloutData.DesktopCreate = IntDesktopObjectCreate;
|
||||||
|
|
|
@ -186,13 +186,18 @@ IntWinStaObjectFind(PVOID Object,
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
STDCALL
|
STDCALL
|
||||||
IntWinStaObjectParse(PVOID Object,
|
IntWinStaObjectParse(IN PVOID Object,
|
||||||
PVOID *NextObject,
|
IN PVOID ObjectType,
|
||||||
PUNICODE_STRING FullPath,
|
IN OUT PACCESS_STATE AccessState,
|
||||||
PWSTR *Path,
|
IN KPROCESSOR_MODE AccessMode,
|
||||||
ULONG Attributes,
|
IN ULONG Attributes,
|
||||||
PVOID Context)
|
IN OUT PUNICODE_STRING FullPath,
|
||||||
|
IN OUT PUNICODE_STRING RemainingName,
|
||||||
|
IN OUT PVOID Context OPTIONAL,
|
||||||
|
IN PSECURITY_QUALITY_OF_SERVICE SecurityQos OPTIONAL,
|
||||||
|
OUT PVOID *NextObject)
|
||||||
{
|
{
|
||||||
|
PWSTR *Path = &RemainingName->Buffer;
|
||||||
PVOID FoundObject;
|
PVOID FoundObject;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
PWSTR End;
|
PWSTR End;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue