internal SecBufferDesc(int size)
{
// Set version to SECBUFFER_VERSION
Version = (int)SecBufferDescType.Version;
// Set the number of buffers
BufferCount = 1;
// Allocate a security buffer of the requested size
SecBuffer secBuffer = new SecBuffer(size);
// Allocate a native chunk of memory for security buffer
BuffersPtr = Marshal.AllocHGlobal(Marshal.SizeOf(secBuffer));
try
{
// Copy managed data into the native memory
Marshal.StructureToPtr(secBuffer, BuffersPtr, false);
}
catch (Exception)
{
// Delete native memory
Marshal.FreeHGlobal(BuffersPtr);
// Reset native buffer pointer
BuffersPtr = IntPtr.Zero;
// Re-throw exception
throw;
}
}