Alexandre Julliard : ntdll/tests: Add some tests for NtQuerySymbolicLinkObject.

Alexandre Julliard julliard at winehq.org
Wed Jun 30 11:13:43 CDT 2010


Module: wine
Branch: master
Commit: 929ba3f11dc5c37ddbd37ed97119367cb149b0cc
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=929ba3f11dc5c37ddbd37ed97119367cb149b0cc

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Wed Jun 30 16:11:55 2010 +0200

ntdll/tests: Add some tests for NtQuerySymbolicLinkObject.

---

 dlls/ntdll/tests/om.c |   35 ++++++++++++++++++++++++++++++++++-
 1 files changed, 34 insertions(+), 1 deletions(-)

diff --git a/dlls/ntdll/tests/om.c b/dlls/ntdll/tests/om.c
index d052c35..24339bb 100644
--- a/dlls/ntdll/tests/om.c
+++ b/dlls/ntdll/tests/om.c
@@ -44,6 +44,7 @@ static NTSTATUS (WINAPI *pNtOpenDirectoryObject)(PHANDLE, ACCESS_MASK, POBJECT_A
 static NTSTATUS (WINAPI *pNtCreateDirectoryObject)(PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES);
 static NTSTATUS (WINAPI *pNtOpenSymbolicLinkObject)(PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES);
 static NTSTATUS (WINAPI *pNtCreateSymbolicLinkObject)(PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, PUNICODE_STRING);
+static NTSTATUS (WINAPI *pNtQuerySymbolicLinkObject)(HANDLE,PUNICODE_STRING,PULONG);
 static NTSTATUS (WINAPI *pNtQueryObject)(HANDLE,OBJECT_INFORMATION_CLASS,PVOID,ULONG,PULONG);
 
 
@@ -402,13 +403,44 @@ static void test_directory(void)
     is_nt4 = (status == STATUS_OBJECT_NAME_NOT_FOUND);  /* nt4 doesn't have Local\\ symlink */
     if (!is_nt4)
     {
+        WCHAR buffer[256];
+        ULONG len, full_len;
+
         ok(status == STATUS_SUCCESS, "Failed to open SymbolicLink(%08x)\n", status);
         pRtlFreeUnicodeString(&str);
         InitializeObjectAttributes(&attr, &str, 0, dir, NULL);
         pRtlCreateUnicodeStringFromAsciiz(&str, "one more level");
         DIR_TEST_CREATE_FAILURE(&h, STATUS_OBJECT_TYPE_MISMATCH)
         pRtlFreeUnicodeString(&str);
-        pNtClose(h);
+
+        str.Buffer = buffer;
+        str.MaximumLength = sizeof(buffer);
+        len = 0xdeadbeef;
+        memset( buffer, 0xaa, sizeof(buffer) );
+        status = pNtQuerySymbolicLinkObject( dir, &str, &len );
+        ok( status == STATUS_SUCCESS, "NtQuerySymbolicLinkObject failed %08x\n", status );
+        full_len = str.Length + sizeof(WCHAR);
+        ok( len == full_len, "bad length %u/%u\n", len, full_len );
+        ok( buffer[len / sizeof(WCHAR) - 1] == 0, "no terminating null\n" );
+
+        str.MaximumLength = str.Length;
+        len = 0xdeadbeef;
+        status = pNtQuerySymbolicLinkObject( dir, &str, &len );
+        ok( status == STATUS_BUFFER_TOO_SMALL, "NtQuerySymbolicLinkObject failed %08x\n", status );
+        ok( len == full_len, "bad length %u/%u\n", len, full_len );
+
+        str.MaximumLength = 0;
+        len = 0xdeadbeef;
+        status = pNtQuerySymbolicLinkObject( dir, &str, &len );
+        ok( status == STATUS_BUFFER_TOO_SMALL, "NtQuerySymbolicLinkObject failed %08x\n", status );
+        ok( len == full_len, "bad length %u/%u\n", len, full_len );
+
+        str.MaximumLength = str.Length + sizeof(WCHAR);
+        len = 0xdeadbeef;
+        status = pNtQuerySymbolicLinkObject( dir, &str, &len );
+        ok( status == STATUS_SUCCESS, "NtQuerySymbolicLinkObject failed %08x\n", status );
+        ok( len == full_len, "bad length %u/%u\n", len, full_len );
+
         pNtClose(dir);
     }
 
@@ -710,6 +742,7 @@ START_TEST(om)
     pNtCreateDirectoryObject= (void *)GetProcAddress(hntdll, "NtCreateDirectoryObject");
     pNtOpenSymbolicLinkObject = (void *)GetProcAddress(hntdll, "NtOpenSymbolicLinkObject");
     pNtCreateSymbolicLinkObject = (void *)GetProcAddress(hntdll, "NtCreateSymbolicLinkObject");
+    pNtQuerySymbolicLinkObject  = (void *)GetProcAddress(hntdll, "NtQuerySymbolicLinkObject");
     pNtCreateSemaphore      =  (void *)GetProcAddress(hntdll, "NtCreateSemaphore");
     pNtCreateTimer          =  (void *)GetProcAddress(hntdll, "NtCreateTimer");
     pNtCreateSection        =  (void *)GetProcAddress(hntdll, "NtCreateSection");




More information about the wine-cvs mailing list