Jelajahi Sumber

Fixed Windows Authentication regression in https://github.com/TalAloni/SMBLibrary/commit/d7e33e465db00d1f8b6f9b23949eef30ce5aefc7

Tal Aloni 8 tahun lalu
induk
melakukan
304fbd0d52

+ 3 - 3
SMBLibrary/Win32/Security/SSPIHelper.cs

@@ -228,7 +228,7 @@ namespace SMBLibrary.Win32.Security
                 }
             }
             FreeCredentialsHandle(ref credentialsHandle);
-            byte[] messageBytes = outputBuffer.GetBufferBytes();
+            byte[] messageBytes = output.GetBufferBytes(0);
             outputBuffer.Dispose();
             output.Dispose();
             return messageBytes;
@@ -260,7 +260,7 @@ namespace SMBLibrary.Win32.Security
                     throw new Exception("InitializeSecurityContext failed, error code " + ((uint)result).ToString("X"));
                 }
             }
-            byte[] messageBytes = outputBuffer.GetBufferBytes();
+            byte[] messageBytes = output.GetBufferBytes(0);
             inputBuffer.Dispose();
             input.Dispose();
             outputBuffer.Dispose();
@@ -296,7 +296,7 @@ namespace SMBLibrary.Win32.Security
                 }
             }
             FreeCredentialsHandle(ref credentialsHandle);
-            byte[] messageBytes = outputBuffer.GetBufferBytes();
+            byte[] messageBytes = output.GetBufferBytes(0);
             inputBuffer.Dispose();
             input.Dispose();
             outputBuffer.Dispose();

+ 13 - 0
SMBLibrary/Win32/Security/Structures/SecBufferDesc.cs

@@ -37,6 +37,19 @@ namespace SMBLibrary.Win32.Security
             }
         }
 
+        public byte[] GetBufferBytes(int bufferIndex)
+        {
+            if (pBuffers == IntPtr.Zero)
+            {
+                throw new ObjectDisposedException("pBuffers");
+            }
+
+            int secBufferSize = Marshal.SizeOf(typeof(SecBuffer));
+            IntPtr pBuffer = new IntPtr(pBuffers.ToInt64() + secBufferSize * bufferIndex);
+            SecBuffer secBuffer = (SecBuffer)Marshal.PtrToStructure(pBuffer, typeof(SecBuffer));
+            return secBuffer.GetBufferBytes();
+        }
+
         public void Dispose()
         {
             if (pBuffers != IntPtr.Zero)