blob: 3024ac3aa601f42d3a2103eccc1493884f0af207 [file] [log] [blame]
// Licensed under the Apache License, Version 2.0
// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
// All files in the project carrying such notice may not be copied, modified, or distributed
// except according to those terms.
//! This module defines the API function prototypes and data structures
use shared::basetsd::PDWORD_PTR;
use shared::guiddef::GUID;
use shared::lmcons::{LMSTR, NET_API_STATUS, PARMNUM_BASE_INFOLEVEL};
use shared::minwindef::{DWORD, LPBYTE, LPDWORD, ULONG};
use um::winnt::{BOOLEAN, PSECURITY_DESCRIPTOR};
extern "system" {
pub fn NetShareAdd(
servername: LMSTR,
level: DWORD,
buf: LPBYTE,
parm_err: LPDWORD,
) -> NET_API_STATUS;
pub fn NetShareEnum(
servername: LMSTR,
level: DWORD,
bufptr: *mut LPBYTE,
prefmaxlen: DWORD,
entriesread: LPDWORD,
totalentries: LPDWORD,
resumehandle: LPDWORD,
) -> NET_API_STATUS;
pub fn NetShareEnumSticky(
servername: LMSTR,
level: DWORD,
bufptr: *mut LPBYTE,
prefmaxlen: DWORD,
entriesread: LPDWORD,
totalentries: LPDWORD,
resumehandle: LPDWORD,
) -> NET_API_STATUS;
pub fn NetShareGetInfo(
servername: LMSTR,
netname: LMSTR,
level: DWORD,
bufptr: *mut LPBYTE,
) -> NET_API_STATUS;
pub fn NetShareSetInfo(
servername: LMSTR,
netname: LMSTR,
level: DWORD,
buf: LPBYTE,
parm_err: LPDWORD,
) -> NET_API_STATUS;
pub fn NetShareDel(
servername: LMSTR,
netname: LMSTR,
reserved: DWORD,
) -> NET_API_STATUS;
pub fn NetShareDelSticky(
servername: LMSTR,
netname: LMSTR,
reserved: DWORD,
) -> NET_API_STATUS;
pub fn NetShareCheck(
servername: LMSTR,
device: LMSTR,
_type: LPDWORD,
) -> NET_API_STATUS;
pub fn NetShareDelEx(
servername: LMSTR,
level: DWORD,
buf: LPBYTE,
) -> NET_API_STATUS;
}
STRUCT!{struct SHARE_INFO_0 {
shi0_netname: LMSTR,
}}
pub type PSHARE_INFO_0 = *mut SHARE_INFO_0;
pub type LPSHARE_INFO_0 = *mut SHARE_INFO_0;
STRUCT!{struct SHARE_INFO_1 {
shi1_netname: LMSTR,
shi1_type: DWORD,
shi1_remark: LMSTR,
}}
pub type PSHARE_INFO_1 = *mut SHARE_INFO_1;
pub type LPSHARE_INFO_1 = *mut SHARE_INFO_1;
STRUCT!{struct SHARE_INFO_2 {
shi2_netname: LMSTR,
shi2_type: DWORD,
shi2_remark: LMSTR,
shi2_permissions: DWORD,
shi2_max_uses: DWORD,
shi2_current_uses: DWORD,
shi2_path: LMSTR,
shi2_passwd: LMSTR,
}}
pub type PSHARE_INFO_2 = *mut SHARE_INFO_2;
pub type LPSHARE_INFO_2 = *mut SHARE_INFO_2;
STRUCT!{struct SHARE_INFO_501 {
shi501_netname: LMSTR,
shi501_type: DWORD,
shi501_remark: LMSTR,
shi501_flags: DWORD,
}}
pub type PSHARE_INFO_501 = *mut SHARE_INFO_501;
pub type LPSHARE_INFO_501 = *mut SHARE_INFO_501;
STRUCT!{struct SHARE_INFO_502 {
shi502_netname: LMSTR,
shi502_type: DWORD,
shi502_remark: LMSTR,
shi502_permissions: DWORD,
shi502_max_uses: DWORD,
shi502_current_uses: DWORD,
shi502_path: LMSTR,
shi502_passwd: LMSTR,
shi502_reserved: DWORD,
shi502_security_descriptor: PSECURITY_DESCRIPTOR,
}}
pub type PSHARE_INFO_502 = *mut SHARE_INFO_502;
pub type LPSHARE_INFO_502 = *mut SHARE_INFO_502;
STRUCT!{struct SHARE_INFO_503 {
shi503_netname: LMSTR,
shi503_type: DWORD,
shi503_remark: LMSTR,
shi503_permissions: DWORD,
shi503_max_uses: DWORD,
shi503_current_uses: DWORD,
shi503_path: LMSTR,
shi503_passwd: LMSTR,
shi503_servername: LMSTR,
shi503_reserved: DWORD,
shi503_security_descriptor: PSECURITY_DESCRIPTOR,
}}
pub type PSHARE_INFO_503 = *mut SHARE_INFO_503;
pub type LPSHARE_INFO_503 = *mut SHARE_INFO_503;
STRUCT!{struct SHARE_INFO_1004 {
shi1004_remark: LMSTR,
}}
pub type PSHARE_INFO_1004 = *mut SHARE_INFO_1004;
pub type LPSHARE_INFO_1004 = *mut SHARE_INFO_1004;
STRUCT!{struct SHARE_INFO_1005 {
shi1005_flags: DWORD,
}}
pub type PSHARE_INFO_1005 = *mut SHARE_INFO_1005;
pub type LPSHARE_INFO_1005 = *mut SHARE_INFO_1005;
STRUCT!{struct SHARE_INFO_1006 {
shi1006_max_uses: DWORD,
}}
pub type PSHARE_INFO_1006 = *mut SHARE_INFO_1006;
pub type LPSHARE_INFO_1006 = *mut SHARE_INFO_1006;
STRUCT!{struct SHARE_INFO_1501 {
shi1501_reserved: DWORD,
shi1501_security_descriptor: PSECURITY_DESCRIPTOR,
}}
pub type PSHARE_INFO_1501 = *mut SHARE_INFO_1501;
pub type LPSHARE_INFO_1501 = *mut SHARE_INFO_1501;
STRUCT!{struct SHARE_INFO_1503 {
shi1503_sharefilter: GUID,
}}
pub type PSHARE_INFO_1503 = *mut SHARE_INFO_1503;
pub type LPSHARE_INFO_1503 = *mut SHARE_INFO_1503;
extern "system" {
pub fn NetServerAliasAdd(
servername: LMSTR,
level: DWORD,
buf: LPBYTE,
) -> NET_API_STATUS;
pub fn NetServerAliasDel(
servername: LMSTR,
level: DWORD,
buf: LPBYTE,
) -> NET_API_STATUS;
pub fn NetServerAliasEnum(
servername: LMSTR,
level: DWORD,
bufptr: *mut LPBYTE,
prefmaxlen: DWORD,
entriesread: LPDWORD,
totalentries: LPDWORD,
resumehandle: LPDWORD,
) -> NET_API_STATUS;
}
STRUCT!{struct SERVER_ALIAS_INFO_0 {
srvai0_alias: LMSTR,
srvai0_target: LMSTR,
srvai0_default: BOOLEAN,
srvai0_reserved: ULONG,
}}
pub type PSERVER_ALIAS_INFO_0 = *mut SERVER_ALIAS_INFO_0;
pub type LPSERVER_ALIAS_INFO_0 = *mut SERVER_ALIAS_INFO_0;
pub const SHARE_NETNAME_PARMNUM: DWORD = 1;
pub const SHARE_TYPE_PARMNUM: DWORD = 3;
pub const SHARE_REMARK_PARMNUM: DWORD = 4;
pub const SHARE_PERMISSIONS_PARMNUM: DWORD = 5;
pub const SHARE_MAX_USES_PARMNUM: DWORD = 6;
pub const SHARE_CURRENT_USES_PARMNUM: DWORD = 7;
pub const SHARE_PATH_PARMNUM: DWORD = 8;
pub const SHARE_PASSWD_PARMNUM: DWORD = 9;
pub const SHARE_FILE_SD_PARMNUM: DWORD = 501;
pub const SHARE_SERVER_PARMNUM: DWORD = 503;
pub const SHARE_REMARK_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + SHARE_REMARK_PARMNUM;
pub const SHARE_MAX_USES_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + SHARE_MAX_USES_PARMNUM;
pub const SHARE_FILE_SD_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + SHARE_FILE_SD_PARMNUM;
pub const SHI1_NUM_ELEMENTS: DWORD = 4;
pub const SHI2_NUM_ELEMENTS: DWORD = 10;
pub const STYPE_DISKTREE: DWORD = 0;
pub const STYPE_PRINTQ: DWORD = 1;
pub const STYPE_DEVICE: DWORD = 2;
pub const STYPE_IPC: DWORD = 3;
pub const STYPE_MASK: DWORD = 0x000000FF;
pub const STYPE_RESERVED1: DWORD = 0x01000000;
pub const STYPE_RESERVED2: DWORD = 0x02000000;
pub const STYPE_RESERVED3: DWORD = 0x04000000;
pub const STYPE_RESERVED4: DWORD = 0x08000000;
pub const STYPE_RESERVED_ALL: DWORD = 0x3FFFFF00;
pub const STYPE_TEMPORARY: DWORD = 0x40000000;
pub const STYPE_SPECIAL: DWORD = 0x80000000;
pub const SHI_USES_UNLIMITED: DWORD = -1i32 as u32;
pub const SHI1005_FLAGS_DFS: DWORD = 0x0001;
pub const SHI1005_FLAGS_DFS_ROOT: DWORD = 0x0002;
pub const CSC_MASK_EXT: DWORD = 0x2030;
pub const CSC_MASK: DWORD = 0x0030;
pub const CSC_CACHE_MANUAL_REINT: DWORD = 0x0000;
pub const CSC_CACHE_AUTO_REINT: DWORD = 0x0010;
pub const CSC_CACHE_VDO: DWORD = 0x0020;
pub const CSC_CACHE_NONE: DWORD = 0x0030;
pub const SHI1005_FLAGS_RESTRICT_EXCLUSIVE_OPENS: DWORD = 0x00100;
pub const SHI1005_FLAGS_FORCE_SHARED_DELETE: DWORD = 0x00200;
pub const SHI1005_FLAGS_ALLOW_NAMESPACE_CACHING: DWORD = 0x00400;
pub const SHI1005_FLAGS_ACCESS_BASED_DIRECTORY_ENUM: DWORD = 0x00800;
pub const SHI1005_FLAGS_FORCE_LEVELII_OPLOCK: DWORD = 0x01000;
pub const SHI1005_FLAGS_ENABLE_HASH: DWORD = 0x02000;
pub const SHI1005_FLAGS_ENABLE_CA: DWORD = 0x04000;
pub const SHI1005_FLAGS_ENCRYPT_DATA: DWORD = 0x08000;
pub const SHI1005_FLAGS_RESERVED: DWORD = 0x10000;
pub const SHI1005_VALID_FLAGS_SET: DWORD = CSC_MASK | SHI1005_FLAGS_RESTRICT_EXCLUSIVE_OPENS
| SHI1005_FLAGS_FORCE_SHARED_DELETE | SHI1005_FLAGS_ALLOW_NAMESPACE_CACHING
| SHI1005_FLAGS_ACCESS_BASED_DIRECTORY_ENUM | SHI1005_FLAGS_FORCE_LEVELII_OPLOCK
| SHI1005_FLAGS_ENABLE_HASH | SHI1005_FLAGS_ENABLE_CA | SHI1005_FLAGS_ENCRYPT_DATA
| SHI1005_FLAGS_RESERVED;
extern "system" {
pub fn NetSessionEnum(
servername: LMSTR,
UncClientName: LMSTR,
username: LMSTR,
level: DWORD,
bufptr: *mut LPBYTE,
prefmaxlen: DWORD,
entriesread: LPDWORD,
totalentries: LPDWORD,
resumehandle: LPDWORD,
) -> NET_API_STATUS;
pub fn NetSessionDel(
servername: LMSTR,
UncClientName: LMSTR,
username: LMSTR,
) -> NET_API_STATUS;
pub fn NetSessionGetInfo(
servername: LMSTR,
UncClientName: LMSTR,
username: LMSTR,
level: DWORD,
bufptr: *mut LPBYTE,
) -> NET_API_STATUS;
}
STRUCT!{struct SESSION_INFO_0 {
sesi0_cname: LMSTR,
}}
pub type PSESSION_INFO_0 = *mut SESSION_INFO_0;
pub type LPSESSION_INFO_0 = *mut SESSION_INFO_0;
STRUCT!{struct SESSION_INFO_1 {
sesi1_cname: LMSTR,
sesi1_username: LMSTR,
sesi1_num_opens: DWORD,
sesi1_time: DWORD,
sesi1_idle_time: DWORD,
sesi1_user_flags: DWORD,
}}
pub type PSESSION_INFO_1 = *mut SESSION_INFO_1;
pub type LPSESSION_INFO_1 = *mut SESSION_INFO_1;
STRUCT!{struct SESSION_INFO_2 {
sesi2_cname: LMSTR,
sesi2_username: LMSTR,
sesi2_num_opens: DWORD,
sesi2_time: DWORD,
sesi2_idle_time: DWORD,
sesi2_user_flags: DWORD,
sesi2_cltype_name: LMSTR,
}}
pub type PSESSION_INFO_2 = *mut SESSION_INFO_2;
pub type LPSESSION_INFO_2 = *mut SESSION_INFO_2;
STRUCT!{struct SESSION_INFO_10 {
sesi10_cname: LMSTR,
sesi10_username: LMSTR,
sesi10_time: DWORD,
sesi10_idle_time: DWORD,
}}
pub type PSESSION_INFO_10 = *mut SESSION_INFO_10;
pub type LPSESSION_INFO_10 = *mut SESSION_INFO_10;
STRUCT!{struct SESSION_INFO_502 {
sesi502_cname: LMSTR,
sesi502_username: LMSTR,
sesi502_num_opens: DWORD,
sesi502_time: DWORD,
sesi502_idle_time: DWORD,
sesi502_user_flags: DWORD,
sesi502_cltype_name: LMSTR,
sesi502_transport: LMSTR,
}}
pub type PSESSION_INFO_502 = *mut SESSION_INFO_502;
pub type LPSESSION_INFO_502 = *mut SESSION_INFO_502;
pub const SESS_GUEST: DWORD = 0x00000001;
pub const SESS_NOENCRYPTION: DWORD = 0x00000002;
pub const SESI1_NUM_ELEMENTS: DWORD = 8;
pub const SESI2_NUM_ELEMENTS: DWORD = 9;
extern "system" {
pub fn NetConnectionEnum(
servername: LMSTR,
qualifier: LMSTR,
level: DWORD,
bufptr: *mut LPBYTE,
prefmaxlen: DWORD,
entriesread: LPDWORD,
totalentries: LPDWORD,
resume_handle: LPDWORD,
) -> NET_API_STATUS;
}
STRUCT!{struct CONNECTION_INFO_0 {
coni0_id: DWORD,
}}
pub type PCONNECTION_INFO_0 = *mut CONNECTION_INFO_0;
pub type LPCONNECTION_INFO_0 = *mut CONNECTION_INFO_0;
STRUCT!{struct CONNECTION_INFO_1 {
coni1_id: DWORD,
coni1_type: DWORD,
coni1_num_opens: DWORD,
coni1_num_users: DWORD,
coni1_time: DWORD,
coni1_username: LMSTR,
coni1_netname: LMSTR,
}}
pub type PCONNECTION_INFO_1 = *mut CONNECTION_INFO_1;
pub type LPCONNECTION_INFO_1 = *mut CONNECTION_INFO_1;
extern "system" {
pub fn NetFileClose(
servername: LMSTR,
fileid: DWORD,
) -> NET_API_STATUS;
pub fn NetFileEnum(
servername: LMSTR,
basepath: LMSTR,
username: LMSTR,
level: DWORD,
bufptr: *mut LPBYTE,
prefmaxlen: DWORD,
entriesread: LPDWORD,
totalentries: LPDWORD,
resume_handle: PDWORD_PTR,
) -> NET_API_STATUS;
pub fn NetFileGetInfo(
servername: LMSTR,
fileid: DWORD,
level: DWORD,
bufptr: *mut LPBYTE,
) -> NET_API_STATUS;
}
STRUCT!{struct FILE_INFO_2 {
fi2_id: DWORD,
}}
pub type PFILE_INFO_2 = *mut FILE_INFO_2;
pub type LPFILE_INFO_2 = *mut FILE_INFO_2;
STRUCT!{struct FILE_INFO_3 {
fi3_id: DWORD,
fi3_permissions: DWORD,
fi3_num_locks: DWORD,
fi3_pathname: LMSTR,
fi3_username: LMSTR,
}}
pub type PFILE_INFO_3 = *mut FILE_INFO_3;
pub type LPFILE_INFO_3 = *mut FILE_INFO_3;
pub const PERM_FILE_READ: DWORD = 0x1;
pub const PERM_FILE_WRITE: DWORD = 0x2;
pub const PERM_FILE_CREATE: DWORD = 0x4;