mirror of
https://github.com/PowerShell/Win32-OpenSSH.git
synced 2025-07-06 21:54:45 +02:00
154 lines
3.5 KiB
C++
154 lines
3.5 KiB
C++
/*
|
|
* Author: NoMachine <developers@nomachine.com>
|
|
*
|
|
* Copyright (c) 2009, 2013 NoMachine
|
|
* All rights reserved
|
|
*
|
|
* Support functions and system calls' replacements needed to let the
|
|
* software run on Win32 based operating systems.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions
|
|
* are met:
|
|
*
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
|
|
#include <winsock2.h>
|
|
#include "LsaString.h"
|
|
|
|
extern LSA_SECPKG_FUNCTION_TABLE LsaApi;
|
|
|
|
//
|
|
// Allocate empty UNICODE_STRING in LSA address space.
|
|
//
|
|
// lsaStr - pointer to new UNICODE_STRING (OUT)
|
|
// wstr - size of string buffer (IN)
|
|
//
|
|
// RETURNS: NTSTATUS code.
|
|
//
|
|
|
|
NTSTATUS LsaAllocUnicodeString(PUNICODE_STRING *lsaStr, DWORD maxLen)
|
|
{
|
|
NTSTATUS ntStat = STATUS_NO_MEMORY;
|
|
|
|
FAIL(lsaStr == NULL);
|
|
|
|
*lsaStr = (PUNICODE_STRING) LsaApi.AllocateLsaHeap(sizeof(UNICODE_STRING));
|
|
|
|
FAIL((*lsaStr) == NULL);
|
|
|
|
(*lsaStr) -> Buffer = (WCHAR *) LsaApi.AllocateLsaHeap(sizeof(maxLen));
|
|
(*lsaStr) -> Length = 0;
|
|
(*lsaStr) -> MaximumLength = maxLen;
|
|
|
|
FAIL((*lsaStr) -> Buffer == NULL);
|
|
|
|
ntStat = 0;
|
|
|
|
fail:
|
|
|
|
if (ntStat)
|
|
{
|
|
if (lsaStr && (*lsaStr))
|
|
{
|
|
LsaApi.FreeLsaHeap((*lsaStr) -> Buffer);
|
|
|
|
LsaApi.FreeLsaHeap((*lsaStr));
|
|
}
|
|
|
|
DBG_MSG("ERROR. Cannot allocate LSA UNICODE_STRING...\n");
|
|
}
|
|
|
|
return ntStat;
|
|
}
|
|
|
|
//
|
|
// Free UNICODE_STRING from LSA address space.
|
|
//
|
|
// lsaStr - pointer to UNICODE_STRING to free (IN/OUT)
|
|
//
|
|
|
|
void LsaFreeUnicodeString(PUNICODE_STRING lsaStr)
|
|
{
|
|
if (lsaStr)
|
|
{
|
|
if (lsaStr -> Buffer)
|
|
{
|
|
LsaApi.FreeLsaHeap(lsaStr -> Buffer);
|
|
}
|
|
|
|
LsaApi.FreeLsaHeap(lsaStr);
|
|
}
|
|
}
|
|
|
|
//
|
|
// Write ASCIIZ char table into UNICODE_STRING.
|
|
//
|
|
// lsaStr - pointer to new UNICODE_STRING (OUT)
|
|
// wstr - size of string buffer (IN)
|
|
//
|
|
// RETURNS: NTSTATUS code.
|
|
//
|
|
|
|
NTSTATUS FillUnicodeString(UNICODE_STRING *lsaStr, const Char *str)
|
|
{
|
|
NTSTATUS ntStat = STATUS_NO_MEMORY;
|
|
|
|
DWORD cbSize = 0;
|
|
|
|
//
|
|
// Is arguments ok?
|
|
//
|
|
|
|
FAIL(lsaStr == NULL);
|
|
|
|
FAIL(lsaStr -> Buffer == NULL);
|
|
|
|
FAIL(str == NULL);
|
|
|
|
//
|
|
// Is string buffer too small?
|
|
//
|
|
|
|
cbSize = strlen(str);
|
|
|
|
FAIL(cbSize >= lsaStr -> MaximumLength);
|
|
|
|
//
|
|
// Fill string buffer.
|
|
//
|
|
|
|
swprintf(lsaStr -> Buffer, L"%hs", str);
|
|
|
|
lsaStr -> Length = cbSize * 2;
|
|
|
|
lsaStr -> Buffer[cbSize * 2] = 0x0000;
|
|
|
|
ntStat = STATUS_SUCCESS;
|
|
|
|
fail:
|
|
|
|
if (ntStat)
|
|
{
|
|
DBG_MSG("ERROR. Cannot fill UNICODE_STRING...\n");
|
|
}
|
|
|
|
return ntStat;
|
|
}
|