📄 jwalmshare.pas
字号:
{******************************************************************************}
{ }
{ Lan Manager Shares API interface Unit for Object Pascal }
{ }
{ Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft }
{ Corporation. All Rights Reserved. }
{ }
{ The original file is: lmshare.h, released November 2001. The original Pascal }
{ code is: LmShare.pas, released Februari 2002. The initial developer of the }
{ Pascal code is Marcel van Brakel (brakelm@chello.nl). }
{ }
{ Portions created by Marcel van Brakel are Copyright (C) 1999-2001 }
{ Marcel van Brakel. All Rights Reserved. }
{ }
{ Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI) }
{ }
{ You may retrieve the latest version of this file at the Project JEDI home }
{ page, located at http://delphi-jedi.org or my personal homepage located at }
{ http://members.chello.nl/m.vanbrakel2 }
{ }
{ The contents of this file are used with permission, subject to the Mozilla }
{ Public License Version 1.1 (the "License"); you may not use this file except }
{ in compliance with the License. You may obtain a copy of the License at }
{ http://www.mozilla.org/MPL/MPL-1.1.html }
{ }
{ Software distributed under the License is distributed on an "AS IS" basis, }
{ WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
{ the specific language governing rights and limitations under the License. }
{ }
{ Alternatively, the contents of this file may be used under the terms of the }
{ GNU Lesser General Public License (the "LGPL License"), in which case the }
{ provisions of the LGPL License are applicable instead of those above. }
{ If you wish to allow use of your version of this file only under the terms }
{ of the LGPL License and not to allow others to use your version of this file }
{ under the MPL, indicate your decision by deleting the provisions above and }
{ replace them with the notice and other provisions required by the LGPL }
{ License. If you do not delete the provisions above, a recipient may use }
{ your version of this file under either the MPL or the LGPL License. }
{ }
{ For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
{ }
{******************************************************************************}
unit JwaLmShare;
{$WEAKPACKAGEUNIT}
{$HPPEMIT ''}
{$HPPEMIT '#include "lmshare.h"'}
{$HPPEMIT ''}
{$I WINDEFINES.INC}
interface
uses
JwaLmCons, JwaWinNT, JwaWinType;
//
// Function Prototypes - Share
//
function NetShareAdd(servername: LMSTR; level: DWORD; buf: LPBYTE; parm_err: LPDWORD): NET_API_STATUS; stdcall;
{$EXTERNALSYM NetShareAdd}
function NetShareEnum(servername: LMSTR; level: DWORD; var bufptr: LPBYTE; prefmaxlen: DWORD; entriesread, totalentries, resume_handle: LPDWORD): NET_API_STATUS; stdcall;
{$EXTERNALSYM NetShareEnum}
function NetShareEnumSticky(servername: LMSTR; level: DWORD; var bufptr: LPBYTE; prefmaxlen: DWORD; entriesread, totalentries, resume_handle: LPDWORD): NET_API_STATUS; stdcall;
{$EXTERNALSYM NetShareEnumSticky}
function NetShareGetInfo(servername, netname: LMSTR; level: DWORD; var bufptr: LPBYTE): NET_API_STATUS; stdcall;
{$EXTERNALSYM NetShareGetInfo}
function NetShareSetInfo(servername, netname: LMSTR; level: DWORD; buf: LPBYTE; parm_err: LPDWORD): NET_API_STATUS; stdcall;
{$EXTERNALSYM NetShareSetInfo}
function NetShareDel(servername, netname: LMSTR; reserved: DWORD): NET_API_STATUS; stdcall;
{$EXTERNALSYM NetShareDel}
function NetShareDelSticky(servername, netname: LMSTR; reserved: DWORD): NET_API_STATUS; stdcall;
{$EXTERNALSYM NetShareDelSticky}
function NetShareCheck(servername, device: LMSTR; type_: LPDWORD): NET_API_STATUS; stdcall;
{$EXTERNALSYM NetShareCheck}
//
// Data Structures - Share
//
type
LPSHARE_INFO_0 = ^SHARE_INFO_0;
{$EXTERNALSYM LPSHARE_INFO_0}
PSHARE_INFO_0 = ^SHARE_INFO_0;
{$EXTERNALSYM PSHARE_INFO_0}
_SHARE_INFO_0 = record
shi0_netname: LMSTR;
end;
{$EXTERNALSYM _SHARE_INFO_0}
SHARE_INFO_0 = _SHARE_INFO_0;
{$EXTERNALSYM SHARE_INFO_0}
TShareInfo0 = SHARE_INFO_0;
PShareInfo0 = PSHARE_INFO_0;
LPSHARE_INFO_1 = ^SHARE_INFO_1;
{$EXTERNALSYM LPSHARE_INFO_1}
PSHARE_INFO_1 = ^SHARE_INFO_1;
{$EXTERNALSYM PSHARE_INFO_1}
_SHARE_INFO_1 = record
shi1_netname: LMSTR;
shi1_type: DWORD;
shi1_remark: LMSTR;
end;
{$EXTERNALSYM _SHARE_INFO_1}
SHARE_INFO_1 = _SHARE_INFO_1;
{$EXTERNALSYM SHARE_INFO_1}
TShareInfo1 = SHARE_INFO_1;
PShareInfo1 = PSHARE_INFO_1;
LPSHARE_INFO_2 = ^SHARE_INFO_2;
{$EXTERNALSYM LPSHARE_INFO_2}
PSHARE_INFO_2 = ^SHARE_INFO_2;
{$EXTERNALSYM PSHARE_INFO_2}
_SHARE_INFO_2 = record
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;
end;
{$EXTERNALSYM _SHARE_INFO_2}
SHARE_INFO_2 = _SHARE_INFO_2;
{$EXTERNALSYM SHARE_INFO_2}
TShareInfo2 = SHARE_INFO_2;
PShareInfo2 = PSHARE_INFO_2;
LPSHARE_INFO_501 = ^SHARE_INFO_501;
{$EXTERNALSYM LPSHARE_INFO_501}
PSHARE_INFO_501 = ^SHARE_INFO_501;
{$EXTERNALSYM PSHARE_INFO_501}
_SHARE_INFO_501 = record
shi501_netname: LMSTR;
shi501_type: DWORD;
shi501_remark: LMSTR;
shi501_flags: DWORD;
end;
{$EXTERNALSYM _SHARE_INFO_501}
SHARE_INFO_501 = _SHARE_INFO_501;
{$EXTERNALSYM SHARE_INFO_501}
TShareInfo501 = SHARE_INFO_501;
PShareInfo501 = PSHARE_INFO_501;
LPSHARE_INFO_502 = ^SHARE_INFO_502;
{$EXTERNALSYM LPSHARE_INFO_502}
PSHARE_INFO_502 = ^SHARE_INFO_502;
{$EXTERNALSYM PSHARE_INFO_502}
_SHARE_INFO_502 = record
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;
end;
{$EXTERNALSYM _SHARE_INFO_502}
SHARE_INFO_502 = _SHARE_INFO_502;
{$EXTERNALSYM SHARE_INFO_502}
TShareInfo502 = SHARE_INFO_502;
PShareInfo502 = PSHARE_INFO_502;
LPSHARE_INFO_1004 = ^SHARE_INFO_1004;
{$EXTERNALSYM LPSHARE_INFO_1004}
PSHARE_INFO_1004 = ^SHARE_INFO_1004;
{$EXTERNALSYM PSHARE_INFO_1004}
_SHARE_INFO_1004 = record
shi1004_remark: LMSTR;
end;
{$EXTERNALSYM _SHARE_INFO_1004}
SHARE_INFO_1004 = _SHARE_INFO_1004;
{$EXTERNALSYM SHARE_INFO_1004}
TShareInfo1004 = SHARE_INFO_1004;
PShareInfo1004 = PSHARE_INFO_1004;
LPSHARE_INFO_1005 = ^SHARE_INFO_1005;
{$EXTERNALSYM LPSHARE_INFO_1005}
PSHARE_INFO_1005 = ^SHARE_INFO_1005;
{$EXTERNALSYM PSHARE_INFO_1005}
_SHARE_INFO_1005 = record
shi1005_flags: DWORD;
end;
{$EXTERNALSYM _SHARE_INFO_1005}
SHARE_INFO_1005 = _SHARE_INFO_1005;
{$EXTERNALSYM SHARE_INFO_1005}
TShareInfo1005 = SHARE_INFO_1005;
PShareInfo1005 = PSHARE_INFO_1005;
LPSHARE_INFO_1006 = ^SHARE_INFO_1006;
{$EXTERNALSYM LPSHARE_INFO_1006}
PSHARE_INFO_1006 = ^SHARE_INFO_1006;
{$EXTERNALSYM PSHARE_INFO_1006}
_SHARE_INFO_1006 = record
shi1006_max_uses: DWORD;
end;
{$EXTERNALSYM _SHARE_INFO_1006}
SHARE_INFO_1006 = _SHARE_INFO_1006;
{$EXTERNALSYM SHARE_INFO_1006}
TShareInfo1006 = SHARE_INFO_1006;
PShareInfo1006 = PSHARE_INFO_1006;
LPSHARE_INFO_1501 = ^SHARE_INFO_1501;
{$EXTERNALSYM LPSHARE_INFO_1501}
PSHARE_INFO_1501 = ^SHARE_INFO_1501;
{$EXTERNALSYM PSHARE_INFO_1501}
_SHARE_INFO_1501 = record
shi1501_reserved: DWORD;
shi1501_security_descriptor: PSECURITY_DESCRIPTOR;
end;
{$EXTERNALSYM _SHARE_INFO_1501}
SHARE_INFO_1501 = _SHARE_INFO_1501;
{$EXTERNALSYM SHARE_INFO_1501}
TShareInfo1501 = SHARE_INFO_1501;
PShareInfo1501 = PSHARE_INFO_1501;
//
// Special Values and Constants - Share
//
//
// Values for parm_err parameter.
//
const
SHARE_NETNAME_PARMNUM = 1;
{$EXTERNALSYM SHARE_NETNAME_PARMNUM}
SHARE_TYPE_PARMNUM = 3;
{$EXTERNALSYM SHARE_TYPE_PARMNUM}
SHARE_REMARK_PARMNUM = 4;
{$EXTERNALSYM SHARE_REMARK_PARMNUM}
SHARE_PERMISSIONS_PARMNUM = 5;
{$EXTERNALSYM SHARE_PERMISSIONS_PARMNUM}
SHARE_MAX_USES_PARMNUM = 6;
{$EXTERNALSYM SHARE_MAX_USES_PARMNUM}
SHARE_CURRENT_USES_PARMNUM = 7;
{$EXTERNALSYM SHARE_CURRENT_USES_PARMNUM}
SHARE_PATH_PARMNUM = 8;
{$EXTERNALSYM SHARE_PATH_PARMNUM}
SHARE_PASSWD_PARMNUM = 9;
{$EXTERNALSYM SHARE_PASSWD_PARMNUM}
SHARE_FILE_SD_PARMNUM = 501;
{$EXTERNALSYM SHARE_FILE_SD_PARMNUM}
//
// Single-field infolevels for NetShareSetInfo.
//
SHARE_REMARK_INFOLEVEL = (PARMNUM_BASE_INFOLEVEL + SHARE_REMARK_PARMNUM);
{$EXTERNALSYM SHARE_REMARK_INFOLEVEL}
SHARE_MAX_USES_INFOLEVEL = (PARMNUM_BASE_INFOLEVEL + SHARE_MAX_USES_PARMNUM);
{$EXTERNALSYM SHARE_MAX_USES_INFOLEVEL}
SHARE_FILE_SD_INFOLEVEL = (PARMNUM_BASE_INFOLEVEL + SHARE_FILE_SD_PARMNUM);
{$EXTERNALSYM SHARE_FILE_SD_INFOLEVEL}
SHI1_NUM_ELEMENTS = 4;
{$EXTERNALSYM SHI1_NUM_ELEMENTS}
SHI2_NUM_ELEMENTS = 10;
{$EXTERNALSYM SHI2_NUM_ELEMENTS}
//
// Share types (shi1_type and shi2_type fields).
//
STYPE_DISKTREE = 0;
{$EXTERNALSYM STYPE_DISKTREE}
STYPE_PRINTQ = 1;
{$EXTERNALSYM STYPE_PRINTQ}
STYPE_DEVICE = 2;
{$EXTERNALSYM STYPE_DEVICE}
STYPE_IPC = 3;
{$EXTERNALSYM STYPE_IPC}
STYPE_TEMPORARY = $40000000;
{$EXTERNALSYM STYPE_TEMPORARY}
STYPE_SPECIAL = DWORD($80000000);
{$EXTERNALSYM STYPE_SPECIAL}
SHI_USES_UNLIMITED = DWORD(-1);
{$EXTERNALSYM SHI_USES_UNLIMITED}
//
// Flags values for the 501 and 1005 levels
//
SHI1005_FLAGS_DFS = $01; // Share is in the DFS
{$EXTERNALSYM SHI1005_FLAGS_DFS}
SHI1005_FLAGS_DFS_ROOT = $02; // Share is root of DFS
{$EXTERNALSYM SHI1005_FLAGS_DFS_ROOT}
CSC_MASK = $30; // Used to mask off the following states
{$EXTERNALSYM CSC_MASK}
CSC_CACHE_MANUAL_REINT = $00; // No automatic file by file reintegration
{$EXTERNALSYM CSC_CACHE_MANUAL_REINT}
CSC_CACHE_AUTO_REINT = $10; // File by file reintegration is OK
{$EXTERNALSYM CSC_CACHE_AUTO_REINT}
CSC_CACHE_VDO = $20; // no need to flow opens
{$EXTERNALSYM CSC_CACHE_VDO}
CSC_CACHE_NONE = $30; // no CSC for this share
{$EXTERNALSYM CSC_CACHE_NONE}
SHI1005_FLAGS_RESTRICT_EXCLUSIVE_OPENS = $0100; // Used to disallow read-deny read behavior
{$EXTERNALSYM SHI1005_FLAGS_RESTRICT_EXCLUSIVE_OPENS}
//
// The subset of 1005 infolevel flags that can be set via the API
//
SHI1005_VALID_FLAGS_SET = (CSC_MASK or SHI1005_FLAGS_RESTRICT_EXCLUSIVE_OPENS);
{$EXTERNALSYM SHI1005_VALID_FLAGS_SET}
//
// SESSION API
//
//
// Function Prototypes Session
//
function NetSessionEnum(servername, UncClientName, username: LMSTR; level: DWORD; var bufptr: LPBYTE; prefmaxlen: DWORD; entriesread, totalentries, resume_handle: LPDWORD): NET_API_STATUS; stdcall;
{$EXTERNALSYM NetSessionEnum}
function NetSessionDel(servername, UncClientName, username: LMSTR): NET_API_STATUS; stdcall;
{$EXTERNALSYM NetSessionDel}
function NetSessionGetInfo(servername, UncClientName, username: LMSTR; level: DWORD; var bufptr: LPBYTE): NET_API_STATUS; stdcall;
{$EXTERNALSYM NetSessionGetInfo}
//
// Data Structures - Session
//
type
LPSESSION_INFO_0 = ^SESSION_INFO_0;
{$EXTERNALSYM LPSESSION_INFO_0}
PSESSION_INFO_0 = ^SESSION_INFO_0;
{$EXTERNALSYM PSESSION_INFO_0}
_SESSION_INFO_0 = record
sesi0_cname: LMSTR; // client name (no backslashes)
end;
{$EXTERNALSYM _SESSION_INFO_0}
SESSION_INFO_0 = _SESSION_INFO_0;
{$EXTERNALSYM SESSION_INFO_0}
TSessionInfo0 = SESSION_INFO_0;
PSessionInfo0 = PSESSION_INFO_0;
LPSESSION_INFO_1 = ^SESSION_INFO_1;
{$EXTERNALSYM LPSESSION_INFO_1}
PSESSION_INFO_1 = ^SESSION_INFO_1;
{$EXTERNALSYM PSESSION_INFO_1}
_SESSION_INFO_1 = record
sesi1_cname: LMSTR; // client name (no backslashes)
sesi1_username: LMSTR;
sesi1_num_opens: DWORD;
sesi1_time: DWORD;
sesi1_idle_time: DWORD;
sesi1_user_flags: DWORD;
end;
{$EXTERNALSYM _SESSION_INFO_1}
SESSION_INFO_1 = _SESSION_INFO_1;
{$EXTERNALSYM SESSION_INFO_1}
TSessionInfo1 = SESSION_INFO_1;
PSessionInfo1 = PSESSION_INFO_1;
LPSESSION_INFO_2 = ^SESSION_INFO_2;
{$EXTERNALSYM LPSESSION_INFO_2}
PSESSION_INFO_2 = ^SESSION_INFO_2;
{$EXTERNALSYM PSESSION_INFO_2}
_SESSION_INFO_2 = record
sesi2_cname: LMSTR; // client name (no backslashes)
sesi2_username: LMSTR;
sesi2_num_opens: DWORD;
sesi2_time: DWORD;
sesi2_idle_time: DWORD;
sesi2_user_flags: DWORD;
sesi2_cltype_name: LMSTR;
end;
{$EXTERNALSYM _SESSION_INFO_2}
SESSION_INFO_2 = _SESSION_INFO_2;
{$EXTERNALSYM SESSION_INFO_2}
TSessionInfo2 = SESSION_INFO_2;
PSessionInfo2 = PSESSION_INFO_2;
LPSESSION_INFO_10 = ^SESSION_INFO_10;
{$EXTERNALSYM LPSESSION_INFO_10}
PSESSION_INFO_10 = ^SESSION_INFO_10;
{$EXTERNALSYM PSESSION_INFO_10}
_SESSION_INFO_10 = record
sesi10_cname: LMSTR; // client name (no backslashes)
sesi10_username: LMSTR;
sesi10_time: DWORD;
sesi10_idle_time: DWORD;
end;
{$EXTERNALSYM _SESSION_INFO_10}
SESSION_INFO_10 = _SESSION_INFO_10;
{$EXTERNALSYM SESSION_INFO_10}
TSessionInfo10 = SESSION_INFO_10;
PSessionInfo10 = PSESSION_INFO_10;
LPSESSION_INFO_502 = ^SESSION_INFO_502;
{$EXTERNALSYM LPSESSION_INFO_502}
PSESSION_INFO_502 = ^SESSION_INFO_502;
{$EXTERNALSYM PSESSION_INFO_502}
_SESSION_INFO_502 = record
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -