mirror of
https://github.com/reactos/reactos.git
synced 2026-05-30 14:34:57 +08:00
[NETAPI32][WKSSVC][IDL] Revert workaround for union _WKSTA_INFO
After fixing the union issue in the RPC runtime, revert all workarounds one by one. Return to the original declaration of union _WKSTA_INFO and fix NetrWkstaGetInfo and NetrWkstaSetInfo.
This commit is contained in:
@@ -130,14 +130,17 @@ done:
|
||||
unsigned long
|
||||
__stdcall
|
||||
NetrWkstaGetInfo(
|
||||
WKSSVC_IDENTIFY_HANDLE ServerName,
|
||||
unsigned long Level,
|
||||
LPWKSTA_INFO *WkstaInfo)
|
||||
_In_ WKSSVC_IDENTIFY_HANDLE ServerName,
|
||||
_In_ unsigned long Level,
|
||||
_Out_ LPWKSTA_INFO WkstaInfo)
|
||||
{
|
||||
WCHAR szComputerName[MAX_COMPUTERNAME_LENGTH + 1];
|
||||
DWORD dwComputerNameLength;
|
||||
LPCWSTR pszLanRoot = L"";
|
||||
PWKSTA_INFO pWkstaInfo = NULL;
|
||||
PWKSTA_INFO_100 pWkstaInfo100 = NULL;
|
||||
PWKSTA_INFO_101 pWkstaInfo101 = NULL;
|
||||
PWKSTA_INFO_102 pWkstaInfo102 = NULL;
|
||||
PWKSTA_INFO_502 pWkstaInfo502 = NULL;
|
||||
LSA_OBJECT_ATTRIBUTES ObjectAttributes;
|
||||
LSA_HANDLE PolicyHandle;
|
||||
PPOLICY_PRIMARY_DOMAIN_INFO DomainInfo = NULL;
|
||||
@@ -204,98 +207,98 @@ NetrWkstaGetInfo(
|
||||
switch (Level)
|
||||
{
|
||||
case 100:
|
||||
pWkstaInfo = midl_user_allocate(sizeof(WKSTA_INFO_100));
|
||||
if (pWkstaInfo == NULL)
|
||||
pWkstaInfo100 = midl_user_allocate(sizeof(WKSTA_INFO_100));
|
||||
if (pWkstaInfo100 == NULL)
|
||||
{
|
||||
dwResult = ERROR_NOT_ENOUGH_MEMORY;
|
||||
break;
|
||||
}
|
||||
|
||||
pWkstaInfo->WkstaInfo100.wki100_platform_id = PLATFORM_ID_NT;
|
||||
pWkstaInfo100->wki100_platform_id = PLATFORM_ID_NT;
|
||||
|
||||
pWkstaInfo->WkstaInfo100.wki100_computername = midl_user_allocate(dwComputerNameLength * sizeof(WCHAR));
|
||||
if (pWkstaInfo->WkstaInfo100.wki100_computername != NULL)
|
||||
wcscpy(pWkstaInfo->WkstaInfo100.wki100_computername, szComputerName);
|
||||
pWkstaInfo100->wki100_computername = midl_user_allocate(dwComputerNameLength * sizeof(WCHAR));
|
||||
if (pWkstaInfo100->wki100_computername != NULL)
|
||||
wcscpy(pWkstaInfo100->wki100_computername, szComputerName);
|
||||
|
||||
pWkstaInfo->WkstaInfo100.wki100_langroup = midl_user_allocate((wcslen(DomainInfo->Name.Buffer) + 1) * sizeof(WCHAR));
|
||||
if (pWkstaInfo->WkstaInfo100.wki100_langroup != NULL)
|
||||
wcscpy(pWkstaInfo->WkstaInfo100.wki100_langroup, DomainInfo->Name.Buffer);
|
||||
pWkstaInfo100->wki100_langroup = midl_user_allocate((wcslen(DomainInfo->Name.Buffer) + 1) * sizeof(WCHAR));
|
||||
if (pWkstaInfo100->wki100_langroup != NULL)
|
||||
wcscpy(pWkstaInfo100->wki100_langroup, DomainInfo->Name.Buffer);
|
||||
|
||||
pWkstaInfo->WkstaInfo100.wki100_ver_major = VersionInfo.dwMajorVersion;
|
||||
pWkstaInfo->WkstaInfo100.wki100_ver_minor = VersionInfo.dwMinorVersion;
|
||||
pWkstaInfo100->wki100_ver_major = VersionInfo.dwMajorVersion;
|
||||
pWkstaInfo100->wki100_ver_minor = VersionInfo.dwMinorVersion;
|
||||
|
||||
*WkstaInfo = pWkstaInfo;
|
||||
WkstaInfo->WkstaInfo100 = pWkstaInfo100;
|
||||
break;
|
||||
|
||||
case 101:
|
||||
pWkstaInfo = midl_user_allocate(sizeof(WKSTA_INFO_101));
|
||||
if (pWkstaInfo == NULL)
|
||||
pWkstaInfo101 = midl_user_allocate(sizeof(WKSTA_INFO_101));
|
||||
if (pWkstaInfo101 == NULL)
|
||||
{
|
||||
dwResult = ERROR_NOT_ENOUGH_MEMORY;
|
||||
break;
|
||||
}
|
||||
|
||||
pWkstaInfo->WkstaInfo101.wki101_platform_id = PLATFORM_ID_NT;
|
||||
pWkstaInfo101->wki101_platform_id = PLATFORM_ID_NT;
|
||||
|
||||
pWkstaInfo->WkstaInfo101.wki101_computername = midl_user_allocate(dwComputerNameLength * sizeof(WCHAR));
|
||||
if (pWkstaInfo->WkstaInfo101.wki101_computername != NULL)
|
||||
wcscpy(pWkstaInfo->WkstaInfo101.wki101_computername, szComputerName);
|
||||
pWkstaInfo101->wki101_computername = midl_user_allocate(dwComputerNameLength * sizeof(WCHAR));
|
||||
if (pWkstaInfo101->wki101_computername != NULL)
|
||||
wcscpy(pWkstaInfo101->wki101_computername, szComputerName);
|
||||
|
||||
pWkstaInfo->WkstaInfo101.wki101_langroup = midl_user_allocate((wcslen(DomainInfo->Name.Buffer) + 1) * sizeof(WCHAR));
|
||||
if (pWkstaInfo->WkstaInfo101.wki101_langroup != NULL)
|
||||
wcscpy(pWkstaInfo->WkstaInfo101.wki101_langroup, DomainInfo->Name.Buffer);
|
||||
pWkstaInfo101->wki101_langroup = midl_user_allocate((wcslen(DomainInfo->Name.Buffer) + 1) * sizeof(WCHAR));
|
||||
if (pWkstaInfo101->wki101_langroup != NULL)
|
||||
wcscpy(pWkstaInfo101->wki101_langroup, DomainInfo->Name.Buffer);
|
||||
|
||||
pWkstaInfo->WkstaInfo101.wki101_ver_major = VersionInfo.dwMajorVersion;
|
||||
pWkstaInfo->WkstaInfo101.wki101_ver_minor = VersionInfo.dwMinorVersion;
|
||||
pWkstaInfo101->wki101_ver_major = VersionInfo.dwMajorVersion;
|
||||
pWkstaInfo101->wki101_ver_minor = VersionInfo.dwMinorVersion;
|
||||
|
||||
pWkstaInfo->WkstaInfo101.wki101_lanroot = midl_user_allocate((wcslen(pszLanRoot) + 1) * sizeof(WCHAR));
|
||||
if (pWkstaInfo->WkstaInfo101.wki101_lanroot != NULL)
|
||||
wcscpy(pWkstaInfo->WkstaInfo101.wki101_lanroot, pszLanRoot);
|
||||
pWkstaInfo101->wki101_lanroot = midl_user_allocate((wcslen(pszLanRoot) + 1) * sizeof(WCHAR));
|
||||
if (pWkstaInfo101->wki101_lanroot != NULL)
|
||||
wcscpy(pWkstaInfo101->wki101_lanroot, pszLanRoot);
|
||||
|
||||
*WkstaInfo = pWkstaInfo;
|
||||
WkstaInfo->WkstaInfo101 = pWkstaInfo101;
|
||||
break;
|
||||
|
||||
case 102:
|
||||
pWkstaInfo = midl_user_allocate(sizeof(WKSTA_INFO_102));
|
||||
if (pWkstaInfo == NULL)
|
||||
pWkstaInfo102 = midl_user_allocate(sizeof(WKSTA_INFO_102));
|
||||
if (pWkstaInfo102 == NULL)
|
||||
{
|
||||
dwResult = ERROR_NOT_ENOUGH_MEMORY;
|
||||
break;
|
||||
}
|
||||
|
||||
pWkstaInfo->WkstaInfo102.wki102_platform_id = PLATFORM_ID_NT;
|
||||
pWkstaInfo102->wki102_platform_id = PLATFORM_ID_NT;
|
||||
|
||||
pWkstaInfo->WkstaInfo102.wki102_computername = midl_user_allocate(dwComputerNameLength * sizeof(WCHAR));
|
||||
if (pWkstaInfo->WkstaInfo102.wki102_computername != NULL)
|
||||
wcscpy(pWkstaInfo->WkstaInfo102.wki102_computername, szComputerName);
|
||||
pWkstaInfo102->wki102_computername = midl_user_allocate(dwComputerNameLength * sizeof(WCHAR));
|
||||
if (pWkstaInfo102->wki102_computername != NULL)
|
||||
wcscpy(pWkstaInfo102->wki102_computername, szComputerName);
|
||||
|
||||
pWkstaInfo->WkstaInfo102.wki102_langroup = midl_user_allocate((wcslen(DomainInfo->Name.Buffer) + 1) * sizeof(WCHAR));
|
||||
if (pWkstaInfo->WkstaInfo102.wki102_langroup != NULL)
|
||||
wcscpy(pWkstaInfo->WkstaInfo102.wki102_langroup, DomainInfo->Name.Buffer);
|
||||
pWkstaInfo102->wki102_langroup = midl_user_allocate((wcslen(DomainInfo->Name.Buffer) + 1) * sizeof(WCHAR));
|
||||
if (pWkstaInfo102->wki102_langroup != NULL)
|
||||
wcscpy(pWkstaInfo102->wki102_langroup, DomainInfo->Name.Buffer);
|
||||
|
||||
pWkstaInfo->WkstaInfo102.wki102_ver_major = VersionInfo.dwMajorVersion;
|
||||
pWkstaInfo->WkstaInfo102.wki102_ver_minor = VersionInfo.dwMinorVersion;
|
||||
pWkstaInfo102->wki102_ver_major = VersionInfo.dwMajorVersion;
|
||||
pWkstaInfo102->wki102_ver_minor = VersionInfo.dwMinorVersion;
|
||||
|
||||
pWkstaInfo->WkstaInfo102.wki102_lanroot = midl_user_allocate((wcslen(pszLanRoot) + 1) * sizeof(WCHAR));
|
||||
if (pWkstaInfo->WkstaInfo102.wki102_lanroot != NULL)
|
||||
wcscpy(pWkstaInfo->WkstaInfo102.wki102_lanroot, pszLanRoot);
|
||||
pWkstaInfo102->wki102_lanroot = midl_user_allocate((wcslen(pszLanRoot) + 1) * sizeof(WCHAR));
|
||||
if (pWkstaInfo102->wki102_lanroot != NULL)
|
||||
wcscpy(pWkstaInfo102->wki102_lanroot, pszLanRoot);
|
||||
|
||||
pWkstaInfo->WkstaInfo102.wki102_logged_on_users = LoggedOnUsers;
|
||||
pWkstaInfo102->wki102_logged_on_users = LoggedOnUsers;
|
||||
|
||||
*WkstaInfo = pWkstaInfo;
|
||||
WkstaInfo->WkstaInfo102 = pWkstaInfo102;
|
||||
break;
|
||||
|
||||
case 502:
|
||||
pWkstaInfo = midl_user_allocate(sizeof(WKSTA_INFO_502));
|
||||
if (pWkstaInfo == NULL)
|
||||
pWkstaInfo502 = midl_user_allocate(sizeof(WKSTA_INFO_502));
|
||||
if (pWkstaInfo502 == NULL)
|
||||
{
|
||||
dwResult = ERROR_NOT_ENOUGH_MEMORY;
|
||||
break;
|
||||
}
|
||||
|
||||
CopyMemory(&pWkstaInfo->WkstaInfo502, &WkstaInfo502, sizeof(WKSTA_INFO_502));
|
||||
CopyMemory(pWkstaInfo502, &WkstaInfo502, sizeof(WKSTA_INFO_502));
|
||||
|
||||
*WkstaInfo = pWkstaInfo;
|
||||
WkstaInfo->WkstaInfo502 = pWkstaInfo502;
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -330,9 +333,9 @@ NetrWkstaSetInfo(
|
||||
switch (Level)
|
||||
{
|
||||
case 502:
|
||||
if (WkstaInfo->WkstaInfo502.wki502_keep_conn >= 1 && WkstaInfo->WkstaInfo502.wki502_keep_conn <= 65535)
|
||||
if (WkstaInfo->WkstaInfo502->wki502_keep_conn >= 1 && WkstaInfo->WkstaInfo502->wki502_keep_conn <= 65535)
|
||||
{
|
||||
WkstaInfo502.wki502_keep_conn = WkstaInfo->WkstaInfo502.wki502_keep_conn;
|
||||
WkstaInfo502.wki502_keep_conn = WkstaInfo->WkstaInfo502->wki502_keep_conn;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -342,9 +345,9 @@ NetrWkstaSetInfo(
|
||||
|
||||
if (dwResult == NERR_Success)
|
||||
{
|
||||
if (WkstaInfo->WkstaInfo502.wki502_max_cmds >= 50 && WkstaInfo->WkstaInfo502.wki502_max_cmds <= 65535)
|
||||
if (WkstaInfo->WkstaInfo502->wki502_max_cmds >= 50 && WkstaInfo->WkstaInfo502->wki502_max_cmds <= 65535)
|
||||
{
|
||||
WkstaInfo502.wki502_max_cmds = WkstaInfo->WkstaInfo502.wki502_max_cmds;
|
||||
WkstaInfo502.wki502_max_cmds = WkstaInfo->WkstaInfo502->wki502_max_cmds;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -355,9 +358,9 @@ NetrWkstaSetInfo(
|
||||
|
||||
if (dwResult == NERR_Success)
|
||||
{
|
||||
if (WkstaInfo->WkstaInfo502.wki502_sess_timeout >= 60 && WkstaInfo->WkstaInfo502.wki502_sess_timeout <= 65535)
|
||||
if (WkstaInfo->WkstaInfo502->wki502_sess_timeout >= 60 && WkstaInfo->WkstaInfo502->wki502_sess_timeout <= 65535)
|
||||
{
|
||||
WkstaInfo502.wki502_sess_timeout = WkstaInfo->WkstaInfo502.wki502_sess_timeout;
|
||||
WkstaInfo502.wki502_sess_timeout = WkstaInfo->WkstaInfo502->wki502_sess_timeout;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -368,9 +371,9 @@ NetrWkstaSetInfo(
|
||||
|
||||
if (dwResult == NERR_Success)
|
||||
{
|
||||
if (WkstaInfo->WkstaInfo502.wki502_dormant_file_limit != 0)
|
||||
if (WkstaInfo->WkstaInfo502->wki502_dormant_file_limit != 0)
|
||||
{
|
||||
WkstaInfo502.wki502_dormant_file_limit = WkstaInfo->WkstaInfo502.wki502_dormant_file_limit;
|
||||
WkstaInfo502.wki502_dormant_file_limit = WkstaInfo->WkstaInfo502->wki502_dormant_file_limit;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -381,9 +384,9 @@ NetrWkstaSetInfo(
|
||||
break;
|
||||
|
||||
case 1013:
|
||||
if (WkstaInfo->WkstaInfo1013.wki1013_keep_conn >= 1 && WkstaInfo->WkstaInfo1013.wki1013_keep_conn <= 65535)
|
||||
if (WkstaInfo->WkstaInfo1013->wki1013_keep_conn >= 1 && WkstaInfo->WkstaInfo1013->wki1013_keep_conn <= 65535)
|
||||
{
|
||||
WkstaInfo502.wki502_keep_conn = WkstaInfo->WkstaInfo1013.wki1013_keep_conn;
|
||||
WkstaInfo502.wki502_keep_conn = WkstaInfo->WkstaInfo1013->wki1013_keep_conn;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -393,9 +396,9 @@ NetrWkstaSetInfo(
|
||||
break;
|
||||
|
||||
case 1018:
|
||||
if (WkstaInfo->WkstaInfo1018.wki1018_sess_timeout >= 60 && WkstaInfo->WkstaInfo1018.wki1018_sess_timeout <= 65535)
|
||||
if (WkstaInfo->WkstaInfo1018->wki1018_sess_timeout >= 60 && WkstaInfo->WkstaInfo1018->wki1018_sess_timeout <= 65535)
|
||||
{
|
||||
WkstaInfo502.wki502_sess_timeout = WkstaInfo->WkstaInfo1018.wki1018_sess_timeout;
|
||||
WkstaInfo502.wki502_sess_timeout = WkstaInfo->WkstaInfo1018->wki1018_sess_timeout;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -405,9 +408,9 @@ NetrWkstaSetInfo(
|
||||
break;
|
||||
|
||||
case 1046:
|
||||
if (WkstaInfo->WkstaInfo1046.wki1046_dormant_file_limit != 0)
|
||||
if (WkstaInfo->WkstaInfo1046->wki1046_dormant_file_limit != 0)
|
||||
{
|
||||
WkstaInfo502.wki502_dormant_file_limit = WkstaInfo->WkstaInfo1046.wki1046_dormant_file_limit;
|
||||
WkstaInfo502.wki502_dormant_file_limit = WkstaInfo->WkstaInfo1046->wki1046_dormant_file_limit;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -884,7 +884,7 @@ NetWkstaGetInfo(
|
||||
{
|
||||
status = NetrWkstaGetInfo(servername,
|
||||
level,
|
||||
(LPWKSTA_INFO*)bufptr);
|
||||
(LPWKSTA_INFO)bufptr);
|
||||
}
|
||||
RpcExcept(EXCEPTION_EXECUTE_HANDLER)
|
||||
{
|
||||
|
||||
@@ -206,7 +206,6 @@ typedef struct _WKSTA_TRANSPORT_INFO_0
|
||||
unsigned long wkti0_wan_ish;
|
||||
} WKSTA_TRANSPORT_INFO_0, *PWKSTA_TRANSPORT_INFO_0, *LPWKSTA_TRANSPORT_INFO_0;
|
||||
|
||||
/*
|
||||
typedef [switch_type(unsigned long)] union _WKSTA_INFO
|
||||
{
|
||||
[case(100)] LPWKSTA_INFO_100 WkstaInfo100;
|
||||
@@ -218,18 +217,6 @@ typedef [switch_type(unsigned long)] union _WKSTA_INFO
|
||||
[case(1046)] LPWKSTA_INFO_1046 WkstaInfo1046;
|
||||
[default] ;
|
||||
} WKSTA_INFO, *PWKSTA_INFO, *LPWKSTA_INFO;
|
||||
*/
|
||||
typedef [switch_type(unsigned long)] union _WKSTA_INFO
|
||||
{
|
||||
[case(100)] WKSTA_INFO_100 WkstaInfo100;
|
||||
[case(101)] WKSTA_INFO_101 WkstaInfo101;
|
||||
[case(102)] WKSTA_INFO_102 WkstaInfo102;
|
||||
[case(502)] WKSTA_INFO_502 WkstaInfo502;
|
||||
[case(1013)] WKSTA_INFO_1013 WkstaInfo1013;
|
||||
[case(1018)] WKSTA_INFO_1018 WkstaInfo1018;
|
||||
[case(1046)] WKSTA_INFO_1046 WkstaInfo1046;
|
||||
[default] ;
|
||||
} WKSTA_INFO, *PWKSTA_INFO, *LPWKSTA_INFO;
|
||||
|
||||
typedef struct _USE_INFO_0
|
||||
{
|
||||
@@ -398,8 +385,7 @@ interface wkssvc
|
||||
NetrWkstaGetInfo(
|
||||
[in, string, unique] WKSSVC_IDENTIFY_HANDLE ServerName,
|
||||
[in] unsigned long Level,
|
||||
[out, switch_is(Level)] LPWKSTA_INFO *WkstaInfo);
|
||||
// [out, switch_is(Level)] LPWKSTA_INFO WkstaInfo);
|
||||
[out, switch_is(Level)] LPWKSTA_INFO WkstaInfo);
|
||||
|
||||
/* Function 1 */
|
||||
unsigned long
|
||||
|
||||
Reference in New Issue
Block a user