mirror of
https://github.com/reactos/reactos.git
synced 2025-06-04 08:50:27 +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_DELETE_METHOD DesktopDelete;
|
||||
OB_DELETE_METHOD WinStaDelete;
|
||||
OB_ROS_PARSE_METHOD WinStaParse;
|
||||
OB_PARSE_METHOD WinStaParse;
|
||||
OB_OPEN_METHOD WinStaOpen;
|
||||
OB_ROS_FIND_METHOD WinStaFind;
|
||||
OB_ROS_CREATE_METHOD DesktopCreate;
|
||||
|
|
|
@ -439,10 +439,15 @@ CmUnRegisterCallback(IN LARGE_INTEGER Cookie);
|
|||
|
||||
NTSTATUS STDCALL
|
||||
CmiObjectParse(IN PVOID ParsedObject,
|
||||
OUT PVOID *NextObject,
|
||||
IN PUNICODE_STRING FullPath,
|
||||
IN OUT PWSTR *Path,
|
||||
IN ULONG Attribute);
|
||||
IN PVOID ObjectType,
|
||||
IN OUT PACCESS_STATE AccessState,
|
||||
IN KPROCESSOR_MODE AccessMode,
|
||||
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
|
||||
CmiObjectDelete(PVOID DeletedObject);
|
||||
|
|
|
@ -369,7 +369,7 @@ CmInitializeRegistry(VOID)
|
|||
ObjectTypeInitializer.ValidAccessMask = KEY_ALL_ACCESS;
|
||||
ObjectTypeInitializer.UseDefaultObject = TRUE;
|
||||
ObjectTypeInitializer.DeleteProcedure = CmiObjectDelete;
|
||||
ObjectTypeInitializer.ParseProcedure = (PVOID)CmiObjectParse;
|
||||
ObjectTypeInitializer.ParseProcedure = CmiObjectParse;
|
||||
ObjectTypeInitializer.SecurityProcedure = CmiObjectSecurity;
|
||||
ObjectTypeInitializer.QueryNameProcedure = CmiObjectQueryName;
|
||||
|
||||
|
|
|
@ -24,12 +24,18 @@ CmiGetLinkTarget(PREGISTRY_HIVE RegistryHive,
|
|||
|
||||
/* FUNCTONS *****************************************************************/
|
||||
|
||||
|
||||
NTSTATUS STDCALL
|
||||
CmiObjectParse(PVOID ParsedObject,
|
||||
PVOID *NextObject,
|
||||
PUNICODE_STRING FullPath,
|
||||
PWSTR *Path,
|
||||
ULONG Attributes)
|
||||
CmiObjectParse(IN PVOID ParsedObject,
|
||||
IN PVOID ObjectType,
|
||||
IN OUT PACCESS_STATE AccessState,
|
||||
IN KPROCESSOR_MODE AccessMode,
|
||||
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;
|
||||
PKEY_OBJECT FoundObject;
|
||||
|
@ -42,6 +48,7 @@ CmiObjectParse(PVOID ParsedObject,
|
|||
UNICODE_STRING LinkPath;
|
||||
UNICODE_STRING TargetPath;
|
||||
UNICODE_STRING KeyName;
|
||||
PWSTR *Path = &RemainingName->Buffer;
|
||||
|
||||
ParsedKey = ParsedObject;
|
||||
|
||||
|
|
|
@ -36,7 +36,7 @@ static GENERIC_MAPPING ExpDesktopMapping =
|
|||
};
|
||||
|
||||
OB_OPEN_METHOD ExpWindowStationObjectOpen = NULL;
|
||||
OB_ROS_PARSE_METHOD ExpWindowStationObjectParse = NULL;
|
||||
OB_PARSE_METHOD ExpWindowStationObjectParse = NULL;
|
||||
OB_DELETE_METHOD ExpWindowStationObjectDelete = NULL;
|
||||
OB_ROS_FIND_METHOD ExpWindowStationObjectFind = NULL;
|
||||
OB_ROS_CREATE_METHOD ExpDesktopObjectCreate = NULL;
|
||||
|
@ -82,20 +82,28 @@ ExpWinStaObjectFind(PVOID WinStaObject,
|
|||
|
||||
NTSTATUS
|
||||
STDCALL
|
||||
ExpWinStaObjectParse(PVOID Object,
|
||||
PVOID *NextObject,
|
||||
PUNICODE_STRING FullPath,
|
||||
PWSTR *Path,
|
||||
ULONG Attributes,
|
||||
POBP_LOOKUP_CONTEXT Context)
|
||||
ExpWinStaObjectParse(IN PVOID ParseObject,
|
||||
IN PVOID ObjectType,
|
||||
IN OUT PACCESS_STATE AccessState,
|
||||
IN KPROCESSOR_MODE AccessMode,
|
||||
IN ULONG Attributes,
|
||||
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 */
|
||||
return ExpWindowStationObjectParse(Object,
|
||||
NextObject,
|
||||
FullPath,
|
||||
Path,
|
||||
return ExpWindowStationObjectParse(ParseObject,
|
||||
ObjectType,
|
||||
AccessState,
|
||||
AccessMode,
|
||||
Attributes,
|
||||
Context);
|
||||
CompleteName,
|
||||
RemainingName,
|
||||
Context,
|
||||
SecurityQos,
|
||||
Object);
|
||||
}
|
||||
|
||||
NTSTATUS
|
||||
|
|
|
@ -60,16 +60,6 @@ typedef PVOID
|
|||
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
|
||||
NTAPI
|
||||
ObpDeleteEntryDirectory(POBP_LOOKUP_CONTEXT Context);
|
||||
|
|
|
@ -37,6 +37,7 @@ ObFindObject(POBJECT_CREATE_INFORMATION ObjectCreateInfo,
|
|||
PWSTR current;
|
||||
UNICODE_STRING PathString;
|
||||
ULONG Attributes;
|
||||
UNICODE_STRING CurrentUs;
|
||||
|
||||
PAGED_CODE();
|
||||
|
||||
|
@ -169,12 +170,19 @@ Next:
|
|||
DPRINT("Current object can't parse\n");
|
||||
break;
|
||||
}
|
||||
Status = ((OB_ROS_PARSE_METHOD)CurrentHeader->Type->TypeInfo.ParseProcedure)(CurrentObject,
|
||||
&NextObject,
|
||||
&PathString,
|
||||
¤t,
|
||||
|
||||
RtlInitUnicodeString(&CurrentUs, current);
|
||||
Status = CurrentHeader->Type->TypeInfo.ParseProcedure(CurrentObject,
|
||||
CurrentHeader->Type,
|
||||
NULL,
|
||||
ExGetPreviousMode(),
|
||||
Attributes,
|
||||
Context);
|
||||
&PathString,
|
||||
&CurrentUs,
|
||||
NULL,
|
||||
NULL,
|
||||
&NextObject);
|
||||
current = CurrentUs.Buffer;
|
||||
if (Status == STATUS_REPARSE)
|
||||
{
|
||||
/* reparse the object path */
|
||||
|
|
|
@ -86,16 +86,22 @@ ObpDeleteSymbolicLink(PVOID ObjectBody)
|
|||
*--*/
|
||||
NTSTATUS
|
||||
NTAPI
|
||||
ObpParseSymbolicLink(PVOID Object,
|
||||
PVOID * NextObject,
|
||||
PUNICODE_STRING FullPath,
|
||||
PWSTR * RemainingPath,
|
||||
ULONG Attributes)
|
||||
ObpParseSymbolicLink(IN PVOID ParsedObject,
|
||||
IN PVOID ObjectType,
|
||||
IN OUT PACCESS_STATE AccessState,
|
||||
IN KPROCESSOR_MODE AccessMode,
|
||||
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;
|
||||
PWSTR NewTargetPath;
|
||||
ULONG LengthUsed, MaximumLength, RemainLength;
|
||||
PWSTR *RemainingPath = &RemainingName->Buffer;
|
||||
|
||||
/*
|
||||
* Stop parsing if the entire path has been parsed and
|
||||
|
@ -186,7 +192,7 @@ ObInitSymbolicLinkImplementation(VOID)
|
|||
ObjectTypeInitializer.PoolType = NonPagedPool;
|
||||
ObjectTypeInitializer.ValidAccessMask = SYMBOLIC_LINK_ALL_ACCESS;
|
||||
ObjectTypeInitializer.UseDefaultObject = TRUE;
|
||||
ObjectTypeInitializer.ParseProcedure = (OB_PARSE_METHOD)ObpParseSymbolicLink;
|
||||
ObjectTypeInitializer.ParseProcedure = ObpParseSymbolicLink;
|
||||
ObjectTypeInitializer.DeleteProcedure = ObpDeleteSymbolicLink;
|
||||
ObpCreateTypeObject(&ObjectTypeInitializer, &Name, &ObSymbolicLinkType);
|
||||
}
|
||||
|
|
|
@ -21,7 +21,7 @@ static PKWIN32_PROCESS_CALLOUT PspWin32ProcessCallback = NULL;
|
|||
static PKWIN32_THREAD_CALLOUT PspWin32ThreadCallback = NULL;
|
||||
|
||||
extern OB_OPEN_METHOD ExpWindowStationObjectOpen;
|
||||
extern OB_ROS_PARSE_METHOD ExpWindowStationObjectParse;
|
||||
extern OB_PARSE_METHOD ExpWindowStationObjectParse;
|
||||
extern OB_DELETE_METHOD ExpWindowStationObjectDelete;
|
||||
extern OB_ROS_FIND_METHOD ExpWindowStationObjectFind;
|
||||
extern OB_ROS_CREATE_METHOD ExpDesktopObjectCreate;
|
||||
|
|
|
@ -70,12 +70,16 @@ IntWinStaObjectFind(PVOID Object,
|
|||
|
||||
NTSTATUS
|
||||
STDCALL
|
||||
IntWinStaObjectParse(PVOID Object,
|
||||
PVOID *NextObject,
|
||||
PUNICODE_STRING FullPath,
|
||||
PWSTR *Path,
|
||||
ULONG Attributes,
|
||||
PVOID Context);
|
||||
IntWinStaObjectParse(IN PVOID ParseObject,
|
||||
IN PVOID ObjectType,
|
||||
IN OUT PACCESS_STATE AccessState,
|
||||
IN KPROCESSOR_MODE AccessMode,
|
||||
IN ULONG Attributes,
|
||||
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
|
||||
IntValidateWindowStationHandle(
|
||||
|
|
|
@ -382,7 +382,7 @@ DriverEntry (
|
|||
* Register Object Manager Callbacks
|
||||
*/
|
||||
CalloutData.WinStaOpen = IntWinStaObjectOpen;
|
||||
CalloutData.WinStaParse = (OB_ROS_PARSE_METHOD)IntWinStaObjectParse;
|
||||
CalloutData.WinStaParse = IntWinStaObjectParse;
|
||||
CalloutData.WinStaDelete = IntWinStaObjectDelete;
|
||||
CalloutData.WinStaFind = IntWinStaObjectFind;
|
||||
CalloutData.DesktopCreate = IntDesktopObjectCreate;
|
||||
|
|
|
@ -186,13 +186,18 @@ IntWinStaObjectFind(PVOID Object,
|
|||
|
||||
NTSTATUS
|
||||
STDCALL
|
||||
IntWinStaObjectParse(PVOID Object,
|
||||
PVOID *NextObject,
|
||||
PUNICODE_STRING FullPath,
|
||||
PWSTR *Path,
|
||||
ULONG Attributes,
|
||||
PVOID Context)
|
||||
IntWinStaObjectParse(IN PVOID Object,
|
||||
IN PVOID ObjectType,
|
||||
IN OUT PACCESS_STATE AccessState,
|
||||
IN KPROCESSOR_MODE AccessMode,
|
||||
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)
|
||||
{
|
||||
PWSTR *Path = &RemainingName->Buffer;
|
||||
PVOID FoundObject;
|
||||
NTSTATUS Status;
|
||||
PWSTR End;
|
||||
|
|
Loading…
Reference in a new issue