2 * COPYRIGHT: See COPYING in the top level directory
4 * FILE: reactos/dll/win32/netapi32/wksta_new.c
5 * PURPOSE: Workstation service interface code
7 * PROGRAMMERS: Eric Kohl
10 /* INCLUDES ******************************************************************/
15 WINE_DEFAULT_DEBUG_CHANNEL(netapi32
);
17 /* FUNCTIONS *****************************************************************/
19 void __RPC_FAR
* __RPC_USER
midl_user_allocate(SIZE_T len
)
21 return HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, len
);
25 void __RPC_USER
midl_user_free(void __RPC_FAR
* ptr
)
27 HeapFree(GetProcessHeap(), 0, ptr
);
32 WKSSVC_IDENTIFY_HANDLE_bind(WKSSVC_IDENTIFY_HANDLE pszSystemName
)
34 handle_t hBinding
= NULL
;
35 LPWSTR pszStringBinding
;
38 TRACE("WKSSVC_IDENTIFY_HANDLE_bind() called\n");
40 status
= RpcStringBindingComposeW(NULL
,
48 TRACE("RpcStringBindingCompose returned 0x%x\n", status
);
52 /* Set the binding handle that will be used to bind to the server. */
53 status
= RpcBindingFromStringBindingW(pszStringBinding
,
57 TRACE("RpcBindingFromStringBinding returned 0x%x\n", status
);
60 status
= RpcStringFreeW(&pszStringBinding
);
63 // TRACE("RpcStringFree returned 0x%x\n", status);
71 WKSSVC_IDENTIFY_HANDLE_unbind(WKSSVC_IDENTIFY_HANDLE pszSystemName
,
76 TRACE("WKSSVC_IDENTIFY_HANDLE_unbind() called\n");
78 status
= RpcBindingFree(&hBinding
);
81 TRACE("RpcBindingFree returned 0x%x\n", status
);
87 WKSSVC_IMPERSONATE_HANDLE_bind(WKSSVC_IMPERSONATE_HANDLE pszSystemName
)
89 handle_t hBinding
= NULL
;
90 LPWSTR pszStringBinding
;
93 TRACE("WKSSVC_IMPERSONATE_HANDLE_bind() called\n");
95 status
= RpcStringBindingComposeW(NULL
,
103 TRACE("RpcStringBindingCompose returned 0x%x\n", status
);
107 /* Set the binding handle that will be used to bind to the server. */
108 status
= RpcBindingFromStringBindingW(pszStringBinding
,
112 TRACE("RpcBindingFromStringBinding returned 0x%x\n", status
);
115 status
= RpcStringFreeW(&pszStringBinding
);
118 // TRACE("RpcStringFree returned 0x%x\n", status);
126 WKSSVC_IMPERSONATE_HANDLE_unbind(WKSSVC_IMPERSONATE_HANDLE pszSystemName
,
131 TRACE("WKSSVC_IMPERSONATE_HANDLE_unbind() called\n");
133 status
= RpcBindingFree(&hBinding
);
136 TRACE("RpcBindingFree returned 0x%x\n", status
);
144 NetGetJoinInformation(
147 PNETSETUP_JOIN_STATUS type
)
149 NET_API_STATUS status
;
151 TRACE("NetGetJoinInformation(%s %p %p)\n", debugstr_w(Server
),
154 if (Name
== NULL
|| type
== NULL
)
155 return ERROR_INVALID_PARAMETER
;
159 status
= NetrGetJoinInformation((LPWSTR
)Server
,
163 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
165 status
= I_RpcMapWin32Status(RpcExceptionCode());
182 NET_API_STATUS status
;
184 TRACE("NetUseAdd(%s %d %p %p)\n", debugstr_w(UncServerName
),
185 Level
, Buf
, ParmError
);
189 status
= NetrUseAdd(UncServerName
,
194 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
196 status
= I_RpcMapWin32Status(RpcExceptionCode());
211 NET_API_STATUS status
;
213 TRACE("NetUseDel(%s %s %d)\n", debugstr_w(UncServerName
),
214 debugstr_w(UseName
), ForceCond
);
218 status
= NetrUseDel(UncServerName
,
222 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
224 status
= I_RpcMapWin32Status(RpcExceptionCode());
238 DWORD PreferedMaximumSize
,
240 LPDWORD TotalEntries
,
241 LPDWORD ResumeHandle
)
243 USE_ENUM_STRUCT UseEnumInfo
;
244 USE_INFO_0_CONTAINER Container0
;
245 USE_INFO_1_CONTAINER Container1
;
246 USE_INFO_2_CONTAINER Container2
;
247 NET_API_STATUS status
;
249 TRACE("NetUseEnum(%s, %d, %p, %d, %p, %p, %p)\n", debugstr_w(UncServerName
),
250 Level
, BufPtr
, PreferedMaximumSize
, EntriesRead
, TotalEntries
, ResumeHandle
);
252 UseEnumInfo
.Level
= Level
;
256 UseEnumInfo
.UseInfo
.Level0
= &Container0
;
257 Container0
.EntriesRead
= 0;
258 Container0
.Buffer
= NULL
;
262 UseEnumInfo
.UseInfo
.Level1
= &Container1
;
263 Container1
.EntriesRead
= 0;
264 Container1
.Buffer
= NULL
;
268 UseEnumInfo
.UseInfo
.Level2
= &Container2
;
269 Container2
.EntriesRead
= 0;
270 Container2
.Buffer
= NULL
;
274 return ERROR_INVALID_PARAMETER
;
279 status
= NetrUseEnum(UncServerName
,
284 if (status
== NERR_Success
|| status
== ERROR_MORE_DATA
)
289 *BufPtr
= (LPBYTE
)UseEnumInfo
.UseInfo
.Level0
->Buffer
;
290 *EntriesRead
= UseEnumInfo
.UseInfo
.Level0
->EntriesRead
;
294 *BufPtr
= (LPBYTE
)UseEnumInfo
.UseInfo
.Level1
->Buffer
;
295 *EntriesRead
= UseEnumInfo
.UseInfo
.Level1
->EntriesRead
;
299 *BufPtr
= (LPBYTE
)UseEnumInfo
.UseInfo
.Level2
->Buffer
;
300 *EntriesRead
= UseEnumInfo
.UseInfo
.Level2
->EntriesRead
;
305 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
307 status
= I_RpcMapWin32Status(RpcExceptionCode());
323 NET_API_STATUS status
;
325 TRACE("NetUseGetInfo(%s, %s, %d, %p)\n", debugstr_w(UncServerName
),
326 debugstr_w(UseName
), Level
, BufPtr
);
332 status
= NetrUseGetInfo(UncServerName
,
337 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
339 status
= I_RpcMapWin32Status(RpcExceptionCode());
355 NET_API_STATUS status
;
357 TRACE("NetWkstaGetInfo(%s, %d, %p)\n", debugstr_w(servername
),
361 return ERROR_INVALID_PARAMETER
;
367 status
= NetrWkstaGetInfo(servername
,
369 (LPWKSTA_INFO
)bufptr
);
371 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
373 status
= I_RpcMapWin32Status(RpcExceptionCode());
390 NET_API_STATUS status
;
392 TRACE("NetWkstaSetInfo(%s, %d, %p, %p)\n", debugstr_w(servername
),
393 level
, buffer
, parm_err
);
397 status
= NetrWkstaSetInfo(servername
,
399 (LPWKSTA_INFO
)buffer
,
402 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
404 status
= I_RpcMapWin32Status(RpcExceptionCode());
414 NetWkstaTransportAdd(
420 NET_API_STATUS status
;
422 TRACE("NetWkstaTransportAdd(%s, %d, %p, %p)\n", debugstr_w(servername
),
423 level
, buf
, parm_err
);
427 status
= NetrWkstaTransportAdd(servername
,
429 (LPWKSTA_TRANSPORT_INFO_0
)buf
,
432 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
434 status
= I_RpcMapWin32Status(RpcExceptionCode());
444 NetWkstaTransportDel(
446 LPWSTR transportname
,
449 NET_API_STATUS status
;
451 TRACE("NetWkstaTransportDel(%s, %s, %d)\n", debugstr_w(servername
),
452 debugstr_w(transportname
), ucond
);
456 status
= NetrWkstaTransportDel(servername
,
460 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
462 status
= I_RpcMapWin32Status(RpcExceptionCode());
473 NetWkstaTransportEnum(
479 LPDWORD totalentries
,
480 LPDWORD resumehandle
)
482 WKSTA_TRANSPORT_ENUM_STRUCT TransportEnumInfo
;
483 WKSTA_TRANSPORT_INFO_0_CONTAINER Container0
;
484 NET_API_STATUS status
;
486 TRACE("NetWkstaTransportEnum(%s, %d, %p, %d, %p, %p, %p)\n", debugstr_w(servername
),
487 level
, bufptr
, prefmaxlen
, entriesread
, totalentries
, resumehandle
);
489 TransportEnumInfo
.Level
= level
;
493 TransportEnumInfo
.WkstaTransportInfo
.Level0
= &Container0
;
494 Container0
.EntriesRead
= 0;
495 Container0
.Buffer
= NULL
;
499 return ERROR_INVALID_PARAMETER
;
504 status
= NetrWkstaTransportEnum(servername
,
509 if (status
== NERR_Success
|| status
== ERROR_MORE_DATA
)
514 *bufptr
= (LPBYTE
)TransportEnumInfo
.WkstaTransportInfo
.Level0
->Buffer
;
515 *entriesread
= TransportEnumInfo
.WkstaTransportInfo
.Level0
->EntriesRead
;
520 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
522 status
= I_RpcMapWin32Status(RpcExceptionCode());
538 LPDWORD totalentries
,
539 LPDWORD resumehandle
)
541 WKSTA_USER_ENUM_STRUCT UserEnumInfo
;
542 WKSTA_USER_INFO_0_CONTAINER Container0
;
543 WKSTA_USER_INFO_1_CONTAINER Container1
;
544 NET_API_STATUS status
;
546 TRACE("NetWkstaUserEnum(%s, %d, %p, %d, %p, %p, %p)\n", debugstr_w(servername
),
547 level
, bufptr
, prefmaxlen
, entriesread
, totalentries
, resumehandle
);
549 UserEnumInfo
.Level
= level
;
553 UserEnumInfo
.WkstaUserInfo
.Level0
= &Container0
;
554 Container0
.EntriesRead
= 0;
555 Container0
.Buffer
= NULL
;
559 UserEnumInfo
.WkstaUserInfo
.Level1
= &Container1
;
560 Container1
.EntriesRead
= 0;
561 Container1
.Buffer
= NULL
;
565 return ERROR_INVALID_PARAMETER
;
570 status
= NetrWkstaUserEnum(servername
,
575 if (status
== NERR_Success
|| status
== ERROR_MORE_DATA
)
580 *bufptr
= (LPBYTE
)UserEnumInfo
.WkstaUserInfo
.Level0
->Buffer
;
581 *entriesread
= UserEnumInfo
.WkstaUserInfo
.Level0
->EntriesRead
;
585 *bufptr
= (LPBYTE
)UserEnumInfo
.WkstaUserInfo
.Level1
->Buffer
;
586 *entriesread
= UserEnumInfo
.WkstaUserInfo
.Level1
->EntriesRead
;
591 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
593 status
= I_RpcMapWin32Status(RpcExceptionCode());
608 NET_API_STATUS status
;
610 TRACE("NetWkstaUserGetInfo(%s, %d, %p)\n", debugstr_w(reserved
),
613 if (reserved
!= NULL
)
614 return ERROR_INVALID_PARAMETER
;
620 status
= NetrWkstaUserGetInfo(NULL
,
622 (LPWKSTA_USER_INFO
)bufptr
);
624 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
626 status
= I_RpcMapWin32Status(RpcExceptionCode());
643 NET_API_STATUS status
;
645 TRACE("NetWkstaSetInfo(%s, %d, %p, %p)\n", debugstr_w(reserved
),
646 level
, buf
, parm_err
);
648 if (reserved
!= NULL
)
649 return ERROR_INVALID_PARAMETER
;
653 status
= NetrWkstaUserSetInfo(NULL
,
655 (LPWKSTA_USER_INFO
)&buf
,
658 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
660 status
= I_RpcMapWin32Status(RpcExceptionCode());