📄 userenv.pas
字号:
// else register user policy notification
//
// Returns: True if successful
// False if error occurs
//
// Notes: Group Policy Notifications. There are 2 ways an application can
// be notify when Group Policy is finished being applied.
//
// 1) Using the RegisterGPNotifcation function and waiting for the
// event to be signalled.
//
// 2) A WM_SETTINGCHANGE message is broadcast to all desktops.
// wParam - 1 if machine policy was applied, 0 if user policy was applied.
// lParam - Points to the string "Policy"
//
//=============================================================================
function RegisterGPNotification(hEvent: HANDLE; bMachine: BOOL): BOOL; stdcall;
{$EXTERNALSYM RegisterGPNotification}
//=============================================================================
//
// UnregisterGPNotification
//
// Removes registration for a Group Policy change notification.
//
// Parameters: hEvent - Event to be removed
//
// Returns: True if successful
// False if error occurs
//
//=============================================================================
function UnregisterGPNotification(hEvent: HANDLE): BOOL; stdcall;
{$EXTERNALSYM UnregisterGPNotification}
//=============================================================================
//
// GPOptions flags
//
// These are the flags found in the GPOptions property of a DS object
//
// For a given DS object (Site, Domain, OU), the GPOptions property
// contains options that effect all the GPOs link to this SDOU.
//
// This is a DWORD type
//
//=============================================================================
const
GPC_BLOCK_POLICY = $00000001; // Block all non-forced policy from above
{$EXTERNALSYM GPC_BLOCK_POLICY}
//=============================================================================
//
// GPLink flags
//
// These are the flags found on the GPLink property of a DS object after
// the GPO path.
//
// For a given DS object (Site, Domain, OU), the GPLink property will
// be in this text format
//
// [LDAP://CN={E615A0E3-C4F1-11D1-A3A7-00AA00615092},CN=Policies,CN=System,DC=ntdev,DC=Microsoft,DC=Com;1]
//
// The GUID is the GPO name, and the number following the LDAP path are the options
// for that link from this DS object. Note, there can be multiple GPOs
// each in their own square brackets in a prioritized list.
//
//=============================================================================
//
// Options for a GPO link
//
const
GPO_FLAG_DISABLE = $00000001; // This GPO is disabled
{$EXTERNALSYM GPO_FLAG_DISABLE}
GPO_FLAG_FORCE = $00000002; // Don't override the settings in
{$EXTERNALSYM GPO_FLAG_FORCE} // this GPO with settings from a GPO below it.
//=============================================================================
//
// GetGPOList
//
//
// Queries for the list of Group Policy Objects for the specified
// user or machine. This function will return a link list
// of Group Policy Objects. Call FreeGPOList to free the list.
//
// Note, most applications will not need to call this function.
// This will primarily be used by services acting on behalf of
// another user or machine. The caller of this function will
// need to look in each GPO for their specific policy
//
// This function can be called two different ways. Either the hToken for
// a user or machine can be supplied and the correct name and domain
// controller name will be generated, or hToken is NULL and the caller
// must supply the name and the domain controller name.
//
// Calling this function with an hToken ensures the list of Group Policy
// Objects is correct for the user or machine since security access checking
// can be perfomed. If hToken is not supplied, the security of the caller
// is used instead which means that list may or may not be 100% correct
// for the intended user / machine. However, this is the fastest way
// to call this function.
//
// hToken - User or machine token, if NULL, lpName and lpHostName must be supplied
// lpName - User or machine name in DN format, if hToken is supplied, this must be NULL
// lpHostName - Domain DN name or domain controller name. If hToken is supplied, this must be NULL
// lpComputerName - Computer name to use to determine site location. If NULL,
// the local computer is used as the reference. Format: \\machinename
// dwFlags - Flags field. See flags definition below
// pGPOList - Address of a pointer which receives the link list of GPOs
//
//
// Returns: TRUE if successful
// FALSE if not. Use GetLastError() for more details.
//
// Examples:
//
// Here's how this function will typically be called for
// looking up the list of GPOs for a user:
//
// LPGROUP_POLICY_OBJECT pGPOList
//
// if (GetGPOList (hToken, NULL, NULL, NULL, 0, &pGPOList))
// {
// // do processing here...
// FreeGPOList (pGPOList)
// }
//
//
// Here's how this function will typically be called for
// looking up the list of GPOs for a machine:
//
// LPGROUP_POLICY_OBJECT pGPOList
//
// if (GetGPOList (NULL, lpMachineName, lpHostName, lpMachineName,
// GPO_LIST_FLAG_MACHINE, &pGPOList))
// {
// // do processing here...
// FreeGPOList (pGPOList)
// }
//
//=============================================================================
//
// Each Group Policy Object is associated (linked) with a site, domain,
// organizational unit, or machine.
//
type
_GPO_LINK = (
GPLinkUnknown, // No link information available
GPLinkMachine, // GPO linked to a machine (local or remote)
GPLinkSite, // GPO linked to a site
GPLinkDomain, // GPO linked to a domain
GPLinkOrganizationalUnit); // GPO linked to a organizational unit
{$EXTERNALSYM _GPO_LINK}
GPO_LINK = _GPO_LINK;
{$EXTERNALSYM GPO_LINK}
PGPO_LINK = ^GPO_LINK;
{$EXTERNALSYM PGPO_LINK}
TGpoLink = GPO_LINK;
PGpoLink = PGPO_LINK;
PGROUP_POLICY_OBJECTA = ^GROUP_POLICY_OBJECTA;
{$EXTERNALSYM PGROUP_POLICY_OBJECTA}
_GROUP_POLICY_OBJECTA = record
dwOptions: DWORD; // See GPLink option flags above
dwVersion: DWORD; // Revision number of the GPO
lpDSPath: LPSTR; // Path to the Active Directory portion of the GPO
lpFileSysPath: LPSTR; // Path to the file system portion of the GPO
lpDisplayName: LPSTR; // Friendly display name
szGPOName: array [0..49] of CHAR; // Unique name
GPOLink: GPO_LINK; // Link information
lParam: LPARAM; // Free space for the caller to store GPO specific information
pNext: PGROUP_POLICY_OBJECTA; // Next GPO in the list
pPrev: PGROUP_POLICY_OBJECTA; // Previous GPO in the list
lpExtensions: LPSTR; // Extensions that are relevant for this GPO
lParam2: LPARAM; // Free space for the caller to store GPO specific information
lpLink: LPSTR; // Path to the Active Directory site, domain, or organizational unit this GPO is linked to
// If this is the local GPO, this points to the word "Local"
end;
{$EXTERNALSYM _GROUP_POLICY_OBJECTA}
GROUP_POLICY_OBJECTA = _GROUP_POLICY_OBJECTA;
{$EXTERNALSYM GROUP_POLICY_OBJECTA}
TGroupPolicyObjectA = GROUP_POLICY_OBJECTA;
PGroupPolicyObjectA = PGROUP_POLICY_OBJECTA;
PGROUP_POLICY_OBJECTW = ^GROUP_POLICY_OBJECTW;
{$EXTERNALSYM PGROUP_POLICY_OBJECTW}
_GROUP_POLICY_OBJECTW = record
dwOptions: DWORD; // See GPLink option flags above
dwVersion: DWORD; // Revision number of the GPO
lpDSPath: LPWSTR; // Path to the Active Directory portion of the GPO
lpFileSysPath: LPWSTR; // Path to the file system portion of the GPO
lpDisplayName: LPWSTR; // Friendly display name
szGPOName: array [0..49] of WCHAR; // Unique name
GPOLink: GPO_LINK; // Link information
lParam: LPARAM; // Free space for the caller to store GPO specific information
pNext: PGROUP_POLICY_OBJECTW; // Next GPO in the list
pPrev: PGROUP_POLICY_OBJECTW; // Previous GPO in the list
lpExtensions: LPWSTR; // Extensions that are relevant for this GPO
lParam2: LPARAM; // Free space for the caller to store GPO specific information
lpLink: LPWSTR; // Path to the Active Directory site, domain, or organizational unit this GPO is linked to
// If this is the local GPO, this points to the word "Local"
end;
{$EXTERNALSYM _GROUP_POLICY_OBJECTW}
GROUP_POLICY_OBJECTW = _GROUP_POLICY_OBJECTW;
{$EXTERNALSYM GROUP_POLICY_OBJECTW}
TGroupPolicyObjectW = GROUP_POLICY_OBJECTW;
PGroupPolicyObjectW = PGROUP_POLICY_OBJECTW;
PPGROUP_POLICY_OBJECTA = ^PGROUP_POLICY_OBJECTA;
{$NODEFINE PPGROUP_POLICY_OBJECTA}
PPGROUP_POLICY_OBJECTW = ^PGROUP_POLICY_OBJECTW;
{$NODEFINE PPGROUP_POLICY_OBJECTW}
{$IFDEF UNICODE}
GROUP_POLICY_OBJECT = GROUP_POLICY_OBJECTW;
{$EXTERNALSYM GROUP_POLICY_OBJECT}
PGROUP_POLICY_OBJECT = PGROUP_POLICY_OBJECTW;
{$EXTERNALSYM PGROUP_POLICY_OBJECT}
PPGROUP_POLICY_OBJECT = PPGROUP_POLICY_OBJECTW;
{$NODEFINE PPGROUP_POLICY_OBJECT}
TGroupPolicyObject = TGroupPolicyObjectW;
PGroupPolicyObject = PGroupPolicyObjectW;
{$ELSE}
GROUP_POLICY_OBJECT = GROUP_POLICY_OBJECTA;
{$EXTERNALSYM GROUP_POLICY_OBJECT}
PGROUP_POLICY_OBJECT = PGROUP_POLICY_OBJECTA;
{$EXTERNALSYM PGROUP_POLICY_OBJECT}
PPGROUP_POLICY_OBJECT = PPGROUP_POLICY_OBJECTA;
{$NODEFINE PPGROUP_POLICY_OBJECT}
TGroupPolicyObject = TGroupPolicyObjectA;
PGroupPolicyObject = PGroupPolicyObjectA;
{$ENDIF}
//
// dwFlags for GetGPOList()
//
const
GPO_LIST_FLAG_MACHINE = $00000001; // Return machine policy information
{$EXTERNALSYM GPO_LIST_FLAG_MACHINE}
GPO_LIST_FLAG_SITEONLY = $00000002; // Return site policy information only
{$EXTERNALSYM GPO_LIST_FLAG_SITEONLY}
function GetGPOListA(hToken: HANDLE; lpName: LPCSTR; lpHostName: LPCSTR;
lpComputerName: LPCSTR; dwFlags: DWORD; pGPOList: PPGROUP_POLICY_OBJECTA): BOOL; stdcall;
{$EXTERNALSYM GetGPOListA}
function GetGPOListW(hToken: HANDLE; lpName: LPCWSTR; lpHostName: LPCWSTR;
lpComputerName: LPCWSTR; dwFlags: DWORD; pGPOList: PPGROUP_POLICY_OBJECTW): BOOL; stdcall;
{$EXTERNALSYM GetGPOListW}
{$IFDEF UNICODE}
function GetGPOList(hToken: HANDLE; lpName: LPCWSTR; lpHostName: LPCWSTR;
lpComputerName: LPCWSTR; dwFlags: DWORD; pGPOList: PPGROUP_POLICY_OBJECT): BOOL; stdcall;
{$EXTERNALSYM GetGPOList}
{$ELSE}
function GetGPOList(hToken: HANDLE; lpName: LPCSTR; lpHostName: LPCSTR;
lpComputerName: LPCSTR; dwFlags: DWORD; pGPOList: PPGROUP_POLICY_OBJECT): BOOL; stdcall;
{$EXTERNALSYM GetGPOList}
{$ENDIF}
//=============================================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -