From 5b210b50cbf3c5fca81a72fbdbf2f5fd484e38c9 Mon Sep 17 00:00:00 2001 From: hakril Date: Mon, 18 May 2020 22:45:08 +0200 Subject: [PATCH] Updated some code in object manager --- samples/object_manager/findobj.py | 2 +- windows/winobject/object_manager.py | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/samples/object_manager/findobj.py b/samples/object_manager/findobj.py index cf0e2d2..c20d63f 100644 --- a/samples/object_manager/findobj.py +++ b/samples/object_manager/findobj.py @@ -15,7 +15,7 @@ def find_name(root, findname): while TODO: try: for name, obj in TODO.pop().items(): - if findname in name: + if findname in name or findname in obj.type: print("* {0}".format(obj_with_link(obj))) if obj.type == "Directory": TODO.append(obj) diff --git a/windows/winobject/object_manager.py b/windows/winobject/object_manager.py index 7eeae9f..95cea9c 100644 --- a/windows/winobject/object_manager.py +++ b/windows/winobject/object_manager.py @@ -20,7 +20,14 @@ def query_link(linkpath): x = winproxy.NtOpenSymbolicLinkObject(res, gdef.DIRECTORY_QUERY | gdef.READ_CONTROL , obj_attr) v = gdef.LSA_UNICODE_STRING.from_size(1000) s = gdef.ULONG() - winproxy.NtQuerySymbolicLinkObject(res, v, s) # Handle Buffer-too-small ? + try: + winproxy.NtQuerySymbolicLinkObject(res, v, s) + except WindowsError as e: + if not (e.winerror & 0xffffffff) == gdef.STATUS_BUFFER_TOO_SMALL: + raise + # If our initial 1000 buffer is not enought (improbable) retry with correct size + v = gdef.LSA_UNICODE_STRING.from_size(s.value) + winproxy.NtQuerySymbolicLinkObject(res, v, s) return v.str