Skip to content

Commit f2f057c

Browse files
committed
[NETAPI32][WKSSVC][IDL] Revert workaround for union _WKSTA_USER_INFO
After fixing the union issue in the RPC runtime, revert all workarounds one by one. Return to the original declaration of union _WKSTA_USER_INFO and fix NetrWkstaUserGetInfo.
1 parent 5b5b1a2 commit f2f057c

File tree

2 files changed

+42
-49
lines changed

2 files changed

+42
-49
lines changed

base/services/wkssvc/rpcserver.c

Lines changed: 40 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -696,14 +696,16 @@ __stdcall
696696
NetrWkstaUserGetInfo(
697697
WKSSVC_IDENTIFY_HANDLE Unused,
698698
unsigned long Level,
699-
LPWKSTA_USER_INFO *UserInfo)
699+
LPWKSTA_USER_INFO UserInfo)
700700
{
701701
MSV1_0_GETUSERINFO_REQUEST UserInfoRequest;
702702
PMSV1_0_GETUSERINFO_RESPONSE UserInfoResponseBuffer = NULL;
703703
DWORD UserInfoResponseBufferSize = 0;
704704
NTSTATUS Status, ProtocolStatus;
705705
LUID LogonId;
706-
PWKSTA_USER_INFO pUserInfo;
706+
PWKSTA_USER_INFO_0 pUserInfo0 = NULL;
707+
PWKSTA_USER_INFO_1 pUserInfo1 = NULL;
708+
PWKSTA_USER_INFO_1101 pUserInfo1101 = NULL;
707709
DWORD dwResult = NERR_Success;
708710

709711
TRACE("NetrWkstaUserGetInfo(%s, %d, %p)\n", debugstr_w(Unused), Level, UserInfo);
@@ -749,120 +751,120 @@ NetrWkstaUserGetInfo(
749751
switch (Level)
750752
{
751753
case 0:
752-
pUserInfo = midl_user_allocate(sizeof(WKSTA_USER_INFO_0));
753-
if (pUserInfo == NULL)
754+
pUserInfo0 = midl_user_allocate(sizeof(WKSTA_USER_INFO_0));
755+
if (pUserInfo0 == NULL)
754756
{
755757
ERR("\n");
756758
dwResult = ERROR_NOT_ENOUGH_MEMORY;
757759
break;
758760
}
759761

760-
ZeroMemory(pUserInfo, sizeof(WKSTA_USER_INFO_0));
762+
ZeroMemory(pUserInfo0, sizeof(WKSTA_USER_INFO_0));
761763

762764
/* User Name */
763-
pUserInfo->UserInfo0.wkui0_username =
765+
pUserInfo0->wkui0_username =
764766
midl_user_allocate(UserInfoResponseBuffer->UserName.Length + sizeof(WCHAR));
765-
if (pUserInfo->UserInfo0.wkui0_username == NULL)
767+
if (pUserInfo0->wkui0_username == NULL)
766768
{
767769
ERR("\n");
768-
midl_user_free(pUserInfo);
770+
midl_user_free(pUserInfo0);
769771
dwResult = ERROR_NOT_ENOUGH_MEMORY;
770772
break;
771773
}
772774

773-
ZeroMemory(pUserInfo->UserInfo0.wkui0_username,
775+
ZeroMemory(pUserInfo0->wkui0_username,
774776
UserInfoResponseBuffer->UserName.Length + sizeof(WCHAR));
775-
CopyMemory(pUserInfo->UserInfo0.wkui0_username,
777+
CopyMemory(pUserInfo0->wkui0_username,
776778
UserInfoResponseBuffer->UserName.Buffer,
777779
UserInfoResponseBuffer->UserName.Length);
778780

779-
*UserInfo = pUserInfo;
781+
UserInfo->UserInfo0 = pUserInfo0;
780782
break;
781783

782784
case 1:
783-
pUserInfo = midl_user_allocate(sizeof(WKSTA_USER_INFO_1));
784-
if (pUserInfo == NULL)
785+
pUserInfo1 = midl_user_allocate(sizeof(WKSTA_USER_INFO_1));
786+
if (pUserInfo1 == NULL)
785787
{
786788
ERR("\n");
787789
dwResult = ERROR_NOT_ENOUGH_MEMORY;
788790
break;
789791
}
790792

791-
ZeroMemory(pUserInfo, sizeof(WKSTA_USER_INFO_1));
793+
ZeroMemory(pUserInfo1, sizeof(WKSTA_USER_INFO_1));
792794

793795
/* User Name */
794-
pUserInfo->UserInfo1.wkui1_username =
796+
pUserInfo1->wkui1_username =
795797
midl_user_allocate(UserInfoResponseBuffer->UserName.Length + sizeof(WCHAR));
796-
if (pUserInfo->UserInfo1.wkui1_username == NULL)
798+
if (pUserInfo1->wkui1_username == NULL)
797799
{
798800
ERR("\n");
799-
midl_user_free(pUserInfo);
801+
midl_user_free(pUserInfo1);
800802
dwResult = ERROR_NOT_ENOUGH_MEMORY;
801803
break;
802804
}
803805

804-
ZeroMemory(pUserInfo->UserInfo1.wkui1_username,
806+
ZeroMemory(pUserInfo1->wkui1_username,
805807
UserInfoResponseBuffer->UserName.Length + sizeof(WCHAR));
806-
CopyMemory(pUserInfo->UserInfo1.wkui1_username,
808+
CopyMemory(pUserInfo1->wkui1_username,
807809
UserInfoResponseBuffer->UserName.Buffer,
808810
UserInfoResponseBuffer->UserName.Length);
809811

810812
/* Logon Domain Name */
811-
pUserInfo->UserInfo1.wkui1_logon_domain =
813+
pUserInfo1->wkui1_logon_domain =
812814
midl_user_allocate(UserInfoResponseBuffer->LogonDomainName.Length + sizeof(WCHAR));
813-
if (pUserInfo->UserInfo1.wkui1_logon_domain == NULL)
815+
if (pUserInfo1->wkui1_logon_domain == NULL)
814816
{
815817
ERR("\n");
816-
midl_user_free(pUserInfo->UserInfo1.wkui1_username);
817-
midl_user_free(pUserInfo);
818+
midl_user_free(pUserInfo1->wkui1_username);
819+
midl_user_free(pUserInfo1);
818820
dwResult = ERROR_NOT_ENOUGH_MEMORY;
819821
break;
820822
}
821823

822-
ZeroMemory(pUserInfo->UserInfo1.wkui1_logon_domain,
824+
ZeroMemory(pUserInfo1->wkui1_logon_domain,
823825
UserInfoResponseBuffer->LogonDomainName.Length + sizeof(WCHAR));
824-
CopyMemory(pUserInfo->UserInfo1.wkui1_logon_domain,
826+
CopyMemory(pUserInfo1->wkui1_logon_domain,
825827
UserInfoResponseBuffer->LogonDomainName.Buffer,
826828
UserInfoResponseBuffer->LogonDomainName.Length);
827829

828830
/* FIXME: wkui1_oth_domains */
829831

830832
/* Logon Server */
831-
pUserInfo->UserInfo1.wkui1_logon_server =
833+
pUserInfo1->wkui1_logon_server =
832834
midl_user_allocate(UserInfoResponseBuffer->LogonServer.Length + sizeof(WCHAR));
833-
if (pUserInfo->UserInfo1.wkui1_logon_server == NULL)
835+
if (pUserInfo1->wkui1_logon_server == NULL)
834836
{
835837
ERR("\n");
836-
midl_user_free(pUserInfo->UserInfo1.wkui1_username);
837-
midl_user_free(pUserInfo->UserInfo1.wkui1_logon_domain);
838-
midl_user_free(pUserInfo);
838+
midl_user_free(pUserInfo1->wkui1_username);
839+
midl_user_free(pUserInfo1->wkui1_logon_domain);
840+
midl_user_free(pUserInfo1);
839841
dwResult = ERROR_NOT_ENOUGH_MEMORY;
840842
break;
841843
}
842844

843-
ZeroMemory(pUserInfo->UserInfo1.wkui1_logon_server,
845+
ZeroMemory(pUserInfo1->wkui1_logon_server,
844846
UserInfoResponseBuffer->LogonServer.Length + sizeof(WCHAR));
845-
CopyMemory(pUserInfo->UserInfo1.wkui1_logon_server,
847+
CopyMemory(pUserInfo1->wkui1_logon_server,
846848
UserInfoResponseBuffer->LogonServer.Buffer,
847849
UserInfoResponseBuffer->LogonServer.Length);
848850

849-
*UserInfo = pUserInfo;
851+
UserInfo->UserInfo1 = pUserInfo1;
850852
break;
851853

852854
case 1101:
853-
pUserInfo = midl_user_allocate(sizeof(WKSTA_USER_INFO_1101));
854-
if (pUserInfo == NULL)
855+
pUserInfo1101 = midl_user_allocate(sizeof(WKSTA_USER_INFO_1101));
856+
if (pUserInfo1101 == NULL)
855857
{
856858
ERR("Failed to allocate WKSTA_USER_INFO_1101\n");
857859
dwResult = ERROR_NOT_ENOUGH_MEMORY;
858860
break;
859861
}
860862

861-
ZeroMemory(pUserInfo, sizeof(WKSTA_USER_INFO_1101));
863+
ZeroMemory(pUserInfo1101, sizeof(WKSTA_USER_INFO_1101));
862864

863865
/* FIXME: wkui1101_oth_domains */
864866

865-
*UserInfo = pUserInfo;
867+
UserInfo->UserInfo1101 = pUserInfo1101;
866868
break;
867869

868870
default:
@@ -881,7 +883,7 @@ NetrWkstaUserGetInfo(
881883
/* Function 4 */
882884
unsigned long
883885
__stdcall
884-
NetrWkstaUserSetInfo (
886+
NetrWkstaUserSetInfo(
885887
WKSSVC_IDENTIFY_HANDLE Unused,
886888
unsigned long Level,
887889
LPWKSTA_USER_INFO UserInfo,

sdk/include/reactos/idl/wkssvc.idl

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -180,22 +180,14 @@ typedef struct _WKSTA_USER_INFO_1101
180180
{
181181
[string] wchar_t *wkui1101_oth_domains;
182182
} WKSTA_USER_INFO_1101, *PWKSTA_USER_INFO_1101, *LPWKSTA_USER_INFO_1101;
183-
/*
183+
184184
typedef [switch_type(unsigned long)] union _WKSTA_USER_INFO
185185
{
186186
[case(0)] LPWKSTA_USER_INFO_0 UserInfo0;
187187
[case(1)] LPWKSTA_USER_INFO_1 UserInfo1;
188188
[case(1101)] LPWKSTA_USER_INFO_1101 UserInfo1101;
189189
[default] ;
190190
} WKSTA_USER_INFO, *PWKSTA_USER_INFO, *LPWKSTA_USER_INFO;
191-
*/
192-
typedef [switch_type(unsigned long)] union _WKSTA_USER_INFO
193-
{
194-
[case(0)] WKSTA_USER_INFO_0 UserInfo0;
195-
[case(1)] WKSTA_USER_INFO_1 UserInfo1;
196-
[case(1101)] WKSTA_USER_INFO_1101 UserInfo1101;
197-
[default] ;
198-
} WKSTA_USER_INFO, *PWKSTA_USER_INFO, *LPWKSTA_USER_INFO;
199191

200192
typedef struct _WKSTA_TRANSPORT_INFO_0
201193
{
@@ -412,8 +404,7 @@ interface wkssvc
412404
NetrWkstaUserGetInfo(
413405
[in, string, unique] WKSSVC_IDENTIFY_HANDLE Unused,
414406
[in] unsigned long Level,
415-
[out, switch_is(Level)] LPWKSTA_USER_INFO *UserInfo);
416-
// [out, switch_is(Level)] LPWKSTA_USER_INFO UserInfo);
407+
[out, switch_is(Level)] LPWKSTA_USER_INFO UserInfo);
417408

418409
/* Function 4 */
419410
unsigned long

0 commit comments

Comments
 (0)