aboutsummaryrefslogtreecommitdiff
path: root/core/sys/windows/netapi32.odin
diff options
context:
space:
mode:
authorJeroen van Rijn <Kelimion@users.noreply.github.com>2021-04-13 02:09:44 +0200
committerJeroen van Rijn <Kelimion@users.noreply.github.com>2021-04-13 02:09:44 +0200
commita1d871360cdfd0e2683bf17df5eaca094254282e (patch)
treecb401c055d04ab4d0408ce72182fb5867f8bbb1d /core/sys/windows/netapi32.odin
parent2b36069924c9fa21111fe8a8b5471e25847c52cf (diff)
Add support to core:windows to add/delete users.
main :: proc() { using fmt; using windows; username := "testuser"; password := "testpass"; ok := add_user("", username, password); fmt.printf("add_user: %v\n", ok); pi := windows.PROCESS_INFORMATION{}; ok2, path := windows.add_user_profile(username); fmt.printf("add_user_profile: %v, %v\n", ok2, path); ok3 := windows.delete_user_profile(username); fmt.printf("delete_user_profile: %v\n", ok3); ok4 := windows.delete_user("", username); fmt.printf("delete_user: %v\n", ok4); // Has optional bool to not wait on the process before returning. b := run_as_user(username, password, "C:\\Repro\\repro.exe", "Hellope!", &pi); fmt.printf("run_as_user: %v %v\n", b, pi); }
Diffstat (limited to 'core/sys/windows/netapi32.odin')
-rw-r--r--core/sys/windows/netapi32.odin37
1 files changed, 37 insertions, 0 deletions
diff --git a/core/sys/windows/netapi32.odin b/core/sys/windows/netapi32.odin
new file mode 100644
index 000000000..d9b41657e
--- /dev/null
+++ b/core/sys/windows/netapi32.odin
@@ -0,0 +1,37 @@
+package sys_windows
+
+foreign import netapi32 "system:Netapi32.lib"
+
+@(default_calling_convention="stdcall")
+foreign netapi32 {
+ NetUserAdd :: proc(
+ servername: wstring,
+ level: DWORD,
+ user_info: ^USER_INFO_1, // Perhaps make this a #raw_union with USER_INFO1..4 when we need the other levels.
+ parm_err: ^DWORD,
+ ) -> NET_API_STATUS ---;
+ NetUserDel :: proc(
+ servername: wstring,
+ username: wstring,
+ ) -> NET_API_STATUS ---;
+ NetUserGetInfo :: proc(
+ servername: wstring,
+ username: wstring,
+ level: DWORD,
+ user_info: ^USER_INFO_1,
+ ) -> NET_API_STATUS ---;
+ NetLocalGroupAddMembers :: proc(
+ servername: wstring,
+ groupname: wstring,
+ level: DWORD,
+ group_members_info: ^LOCALGROUP_MEMBERS_INFO_0, // Actually a variably sized array of these.
+ totalentries: DWORD,
+ ) -> NET_API_STATUS ---;
+ NetLocalGroupDelMembers :: proc(
+ servername: wstring,
+ groupname: wstring,
+ level: DWORD,
+ group_members_info: ^LOCALGROUP_MEMBERS_INFO_0, // Actually a variably sized array of these.
+ totalentries: DWORD,
+ ) -> NET_API_STATUS ---;
+} \ No newline at end of file