[NTOBJSHEX]
[reactos.git] / reactos / dll / shellext / ntobjshex / ntobjenum.cpp
index e34a747..603b144 100644 (file)
@@ -42,7 +42,7 @@ const LPCWSTR ObjectTypeNames [] = {
     L"Mutant", L"Section", L"Event", L"Semaphore",
     L"Timer", L"Key", L"EventPair", L"IoCompletion",
     L"Device", L"File", L"Controller", L"Profile",
-    L"Type", L"Desktop", L"WindowStatiom", L"Driver",
+    L"Type", L"Desktop", L"WindowStation", L"Driver",
     L"Token", L"Process", L"Thread", L"Adapter", L"Port",
     0
 };
@@ -86,7 +86,7 @@ static DWORD NtOpenObject(OBJECT_TYPE type, PHANDLE phandle, DWORD access, LPCWS
     case TIMER_OBJECT:          return NtOpenTimer(phandle, access, &open_struct);
     case KEY_OBJECT:            return NtOpenKey(phandle, access, &open_struct);
     case EVENTPAIR_OBJECT:      return NtOpenEventPair(phandle, access, &open_struct);
-    case IOCOMPLETITION_OBJECT: return NtOpenIoCompletion(phandle, access, &open_struct);
+    case IOCOMPLETION_OBJECT:   return NtOpenIoCompletion(phandle, access, &open_struct);
     case FILE_OBJECT:           return NtOpenFile(phandle, access, &open_struct, &ioStatusBlock, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, 0);
     default:
         return ERROR_INVALID_FUNCTION;
@@ -172,7 +172,10 @@ HRESULT GetNTObjectSymbolicLinkTarget(LPCWSTR path, LPCWSTR entryName, PUNICODE_
     StringCbCopyExW(buffer, sizeof(buffer), path, &pend, NULL, 0);
 
     if (pend[-1] != '\\')
+    {
         *pend++ = '\\';
+        *pend = 0;
+    }
 
     StringCbCatW(buffer, sizeof(buffer), entryName);
 
@@ -180,11 +183,11 @@ HRESULT GetNTObjectSymbolicLinkTarget(LPCWSTR path, LPCWSTR entryName, PUNICODE_
 
     LinkTarget->Length = 0;
 
-    DWORD err = NtOpenObject(SYMBOLICLINK_OBJECT, &handle, 0, buffer);
+    DWORD err = NtOpenObject(SYMBOLICLINK_OBJECT, &handle, SYMBOLIC_LINK_QUERY, buffer);
     if (!NT_SUCCESS(err))
         return HRESULT_FROM_NT(err);
 
-    err = NT_SUCCESS(NtQuerySymbolicLinkObject(handle, LinkTarget, NULL));
+    err = NtQuerySymbolicLinkObject(handle, LinkTarget, NULL);
     if (!NT_SUCCESS(err))
         return HRESULT_FROM_NT(err);
 
@@ -429,7 +432,7 @@ public:
 
         DWORD entryBufferLength = FIELD_OFFSET(RegPidlEntry, entryName) + sizeof(WCHAR) + cchName * sizeof(WCHAR);
 
-        BOOL copyData = dataSize < 32;
+        BOOL copyData = dataSize <= 32;
         if (copyData)
         {
             entryBufferLength += dataSize + sizeof(WCHAR);
@@ -437,7 +440,10 @@ public:
             otype = REG_ENTRY_VALUE_WITH_CONTENT;
         }
 
-        RegPidlEntry* entry = (RegPidlEntry*) CoTaskMemAlloc(entryBufferLength + 2);
+        // allocate space for the terminator
+        entryBufferLength += 2;
+
+        RegPidlEntry* entry = (RegPidlEntry*) CoTaskMemAlloc(entryBufferLength);
         if (!entry)
             return E_OUTOFMEMORY;