517 lines
18 KiB
C++
517 lines
18 KiB
C++
#include "NWCOMPAT.hxx"
|
|
#pragma hdrstop
|
|
|
|
const BSTR bstrAddressTypeString = L"IPX";
|
|
const BSTR bstrComputerOperatingSystem = L"NW3Compat";
|
|
const BSTR bstrFileShareDescription = L"Disk";
|
|
const BSTR bstrNWFileServiceName = L"NetWareFileServer";
|
|
const BSTR bstrProviderName = L"NWCOMPAT";
|
|
|
|
CRITICAL_SECTION BindCacheCritSect;
|
|
|
|
#define MAX_LONG (0x7FFFFFFF)
|
|
#define MIN_LONG (0x80000000)
|
|
#define MAX_BOOLEAN 1
|
|
#define MAX_STRLEN 256
|
|
#define MAX_UCHAR 255
|
|
#define MAX_USHORT 65535
|
|
|
|
|
|
PROPERTYINFO ComputerClass[] =
|
|
{ { TEXT("OperatingSystem"), // ro
|
|
TEXT(""), TEXT("String"), MAX_STRLEN, 0, FALSE,
|
|
PROPERTY_RW, COMP_OPERATINGSYSTEM_ID, NT_SYNTAX_ID_LPTSTR},
|
|
{ TEXT("OperatingSystemVersion"), // ro
|
|
TEXT(""), TEXT("String"), MAX_STRLEN, 0, FALSE,
|
|
PROPERTY_RW, COMP_OPERATINGSYSTEMVERSION_ID, NT_SYNTAX_ID_LPTSTR}
|
|
};
|
|
|
|
|
|
DWORD gdwComputerTableSize = sizeof(ComputerClass)/sizeof(PROPERTYINFO);
|
|
|
|
|
|
PROPERTYINFO UserClass[] =
|
|
{ { TEXT("FullName"),
|
|
TEXT(""), TEXT("String"), NW_DATA_SIZE, 0, FALSE, // max 128 bytes
|
|
PROPERTY_RW, USER_FULLNAME_ID, NT_SYNTAX_ID_LPTSTR },
|
|
{ TEXT("AccountDisabled"),
|
|
TEXT(""), TEXT("Boolean"), MAX_BOOLEAN, 0, FALSE,
|
|
PROPERTY_RW, USER_ACCOUNTDISABLED_ID, NT_SYNTAX_ID_BOOL },
|
|
{ TEXT("AccountExpirationDate"),
|
|
TEXT(""), TEXT("Time"), 0, 0, FALSE,
|
|
PROPERTY_RW, USER_ACCOUNTEXPIRATIONDATE_ID, NT_SYNTAX_ID_NW312DATE },
|
|
{ TEXT("AccountCanExpire"),
|
|
TEXT(""), TEXT("Boolean"), MAX_BOOLEAN, 0, FALSE,
|
|
PROPERTY_RW, USER_CANACCOUNTEXPIRE_ID, NT_SYNTAX_ID_BOOL },
|
|
{ TEXT("GraceLoginsAllowed"),
|
|
TEXT(""), TEXT("Integer"), MAX_UCHAR, 0, FALSE,
|
|
PROPERTY_RW, USER_GRACELOGINSALLOWED_ID, NT_SYNTAX_ID_DWORD },
|
|
{ TEXT("GraceLoginsRemaining"),
|
|
TEXT(""), TEXT("Integer"), MAX_UCHAR, 0, FALSE,
|
|
PROPERTY_RW, USER_GRACELOGINSREMAINING_ID, NT_SYNTAX_ID_DWORD },
|
|
{ TEXT("IsAccountLocked"),
|
|
TEXT(""), TEXT("Boolean"), MAX_BOOLEAN, 0, FALSE,
|
|
PROPERTY_RW, USER_ISACCOUNTLOCKED_ID, NT_SYNTAX_ID_BOOL},
|
|
{ TEXT("IsAdmin"),
|
|
TEXT(""), TEXT("Boolean"), MAX_BOOLEAN, 0, FALSE,
|
|
PROPERTY_RW, USER_ISADMIN_ID, NT_SYNTAX_ID_BOOL},
|
|
{ TEXT("MaxLogins"),
|
|
TEXT(""), TEXT("Integer"), MAX_USHORT, 0, FALSE,
|
|
PROPERTY_RW, USER_MAXLOGINS_ID, NT_SYNTAX_ID_DWORD},
|
|
{ TEXT("PasswordExpirationDate"),
|
|
TEXT(""), TEXT("Time"), 0, 0, FALSE,
|
|
PROPERTY_RW, USER_PASSWORDEXPIRATIONDATE_ID, NT_SYNTAX_ID_NW312DATE},
|
|
{ TEXT("PasswordCanExpire"),
|
|
TEXT(""), TEXT("Boolean"), MAX_BOOLEAN, 0, FALSE,
|
|
PROPERTY_RW, USER_CANPASSWORDEXPIRE_ID, NT_SYNTAX_ID_BOOL },
|
|
{ TEXT("PasswordMinimumLength"),
|
|
TEXT(""), TEXT("Integer"), MAX_UCHAR, 0, FALSE,
|
|
PROPERTY_RW, USER_PASSWORDMINIMUMLENGTH_ID, NT_SYNTAX_ID_DWORD},
|
|
{ TEXT("PasswordRequired"),
|
|
TEXT(""), TEXT("Boolean"), MAX_BOOLEAN, 0, FALSE,
|
|
PROPERTY_RW, USER_PASSWORDREQUIRED_ID, NT_SYNTAX_ID_BOOL},
|
|
{ TEXT("RequireUniquePassword"),
|
|
TEXT(""), TEXT("Boolean"), MAX_BOOLEAN, 0, FALSE,
|
|
PROPERTY_RW, USER_REQUIREUNIQUEPASSWORD_ID, NT_SYNTAX_ID_BOOL},
|
|
{ TEXT("BadLoginAddress"), // ro
|
|
TEXT(""), TEXT("String"), MAX_STRLEN, 0, FALSE,
|
|
PROPERTY_READABLE, USER_BADLOGINADDRESS_ID, NT_SYNTAX_ID_LPTSTR},
|
|
{ TEXT("LastLogin"), // ro
|
|
TEXT(""), TEXT("Time"), 0, 0, FALSE,
|
|
PROPERTY_READABLE, USER_LASTLOGIN_ID, NT_SYNTAX_ID_NW312DATE},
|
|
{ TEXT("LoginHours"),
|
|
TEXT(""), TEXT("OctetString"), 0, 0, FALSE,
|
|
PROPERTY_RW, USER_LOGINHOURS_ID, NT_SYNTAX_ID_OCTETSTRING}
|
|
};
|
|
|
|
DWORD gdwUserTableSize = sizeof(UserClass)/sizeof(PROPERTYINFO);
|
|
|
|
|
|
PROPERTYINFO GroupClass[] =
|
|
{ { TEXT("Description"), // FSGroupGeneralInfo
|
|
TEXT(""), TEXT("String"), NW_DATA_SIZE, 0, FALSE, // max 128 bytes
|
|
PROPERTY_RW, GROUP_DESCRIPTION_ID, NT_SYNTAX_ID_LPTSTR }
|
|
};
|
|
|
|
|
|
DWORD gdwGroupTableSize = sizeof(GroupClass)/sizeof(PROPERTYINFO);
|
|
|
|
PROPERTYINFO FileServiceClass[] =
|
|
{ { TEXT("HostComputer"), // FSServiceConfiguration
|
|
TEXT(""), TEXT("ADsPath"), MAX_STRLEN, 0, FALSE,
|
|
PROPERTY_READABLE, 1, NT_SYNTAX_ID_LPTSTR },
|
|
{ TEXT("MaxUserCount"),
|
|
TEXT(""), TEXT("Integer"), MAX_USHORT, 0, FALSE,
|
|
PROPERTY_READABLE, 2, NT_SYNTAX_ID_DWORD }
|
|
};
|
|
|
|
DWORD gdwFileServiceTableSize = sizeof(FileServiceClass)/sizeof(PROPERTYINFO);
|
|
|
|
PROPERTYINFO FileShareClass[] =
|
|
{ { TEXT("Description"),
|
|
TEXT(""), TEXT("String"), MAX_STRLEN, 0, FALSE,
|
|
PROPERTY_READABLE, 1, NT_SYNTAX_ID_LPTSTR },
|
|
{ TEXT("HostComputer"),
|
|
TEXT(""), TEXT("ADsPath"), MAX_STRLEN, 0, FALSE,
|
|
PROPERTY_READABLE, 1, NT_SYNTAX_ID_LPTSTR },
|
|
{ TEXT("MaxUserCount"),
|
|
TEXT(""), TEXT("Integer"), MAX_USHORT, 0, FALSE,
|
|
PROPERTY_RW, 1, NT_SYNTAX_ID_DWORD }
|
|
};
|
|
|
|
DWORD gdwFileShareTableSize = sizeof(FileShareClass)/sizeof(PROPERTYINFO);
|
|
|
|
PROPERTYINFO PrintQueueClass[] =
|
|
{ { TEXT("PrinterPath"), // FSPrintQueueGeneralInfo
|
|
TEXT(""), TEXT("String"), MAX_STRLEN, 0, FALSE,
|
|
PROPERTY_READABLE, 2, NT_SYNTAX_ID_LPTSTR },
|
|
{ TEXT("Model"),
|
|
TEXT(""), TEXT("String"), MAX_STRLEN, 0, FALSE,
|
|
PROPERTY_RW, 2, NT_SYNTAX_ID_LPTSTR },
|
|
{ TEXT("Datatype"),
|
|
TEXT(""), TEXT("String"), MAX_STRLEN, 0, FALSE,
|
|
PROPERTY_RW, 2, NT_SYNTAX_ID_LPTSTR },
|
|
{ TEXT("PrintProcessor"),
|
|
TEXT(""), TEXT("String"), MAX_STRLEN, 0, FALSE,
|
|
PROPERTY_RW, 2, NT_SYNTAX_ID_LPTSTR },
|
|
{ TEXT("Description"),
|
|
TEXT(""), TEXT("String"), MAX_STRLEN, 0, FALSE,
|
|
PROPERTY_RW, 2, NT_SYNTAX_ID_LPTSTR },
|
|
{ TEXT("Location"),
|
|
TEXT(""), TEXT("String"), MAX_STRLEN, 0, FALSE,
|
|
PROPERTY_RW, 2, NT_SYNTAX_ID_LPTSTR },
|
|
{ TEXT("StartTime"),
|
|
TEXT(""), TEXT("Time"), 0, 0, FALSE,
|
|
PROPERTY_RW, 2, NT_SYNTAX_ID_DATE },
|
|
{ TEXT("UntilTime"),
|
|
TEXT(""), TEXT("Time"), 0, 0, FALSE,
|
|
PROPERTY_RW, 2, NT_SYNTAX_ID_DATE },
|
|
{ TEXT("DefaultJobPriority"),
|
|
TEXT(""), TEXT("Integer"), MAX_LONG, 0, FALSE,
|
|
PROPERTY_RW, 2, NT_SYNTAX_ID_DWORD },
|
|
{ TEXT("Priority"),
|
|
TEXT(""), TEXT("Integer"), MAX_LONG, 0, FALSE,
|
|
PROPERTY_RW, 2, NT_SYNTAX_ID_DWORD },
|
|
{ TEXT("BannerPage"),
|
|
TEXT(""), TEXT("Path"), MAX_STRLEN, 0, FALSE,
|
|
PROPERTY_RW, 2, NT_SYNTAX_ID_LPTSTR },
|
|
{ TEXT("PrintDevices"),
|
|
TEXT(""), TEXT("String"), MAX_STRLEN, 0, TRUE,
|
|
PROPERTY_RW, 2, NT_SYNTAX_ID_DelimitedString }
|
|
};
|
|
|
|
DWORD gdwPrinterTableSize = sizeof(PrintQueueClass)/sizeof(PROPERTYINFO);
|
|
|
|
|
|
PROPERTYINFO PrintJobClass[] =
|
|
{ { TEXT("HostPrintQueue"), // ro, FSPrintJobGeneralInfo
|
|
TEXT(""), TEXT("ADsPath"), MAX_STRLEN, 0, FALSE,
|
|
PROPERTY_READABLE, 1, NT_SYNTAX_ID_LPTSTR },
|
|
{ TEXT("User"), // ro
|
|
TEXT(""), TEXT("String"), MAX_STRLEN, 0, FALSE,
|
|
PROPERTY_READABLE, 1, NT_SYNTAX_ID_LPTSTR },
|
|
{ TEXT("TimeSubmitted"), // ro
|
|
TEXT(""), TEXT("Time"), 0, 0, FALSE,
|
|
PROPERTY_READABLE, 1, NT_SYNTAX_ID_SYSTEMTIME },
|
|
{ TEXT("TotalPages"), // ro
|
|
TEXT(""), TEXT("Integer"), MAX_LONG, 0, FALSE,
|
|
PROPERTY_READABLE, 1, NT_SYNTAX_ID_DWORD },
|
|
{ TEXT("Size"), // ro
|
|
TEXT(""), TEXT("Integer"), MAX_LONG, 0, FALSE,
|
|
PROPERTY_READABLE, 2, NT_SYNTAX_ID_DWORD },
|
|
{ TEXT("Description"),
|
|
TEXT(""), TEXT("String"), MAX_STRLEN, 0, FALSE,
|
|
PROPERTY_RW, 1, NT_SYNTAX_ID_LPTSTR },
|
|
{ TEXT("Priority"),
|
|
TEXT(""), TEXT("Integer"), MAX_LONG, 0, FALSE,
|
|
PROPERTY_RW, 1, NT_SYNTAX_ID_DWORD },
|
|
{ TEXT("StartTime"),
|
|
TEXT(""), TEXT("Time"), 0, 0, FALSE,
|
|
PROPERTY_RW, 2, NT_SYNTAX_ID_DATE },
|
|
{ TEXT("UntilTime"),
|
|
TEXT(""), TEXT("Time"), 0, 0, FALSE,
|
|
PROPERTY_RW, 2, NT_SYNTAX_ID_DATE },
|
|
{ TEXT("Notify"),
|
|
TEXT(""), TEXT("String"), MAX_STRLEN, 0, FALSE,
|
|
PROPERTY_RW, 2, NT_SYNTAX_ID_LPTSTR },
|
|
{ TEXT("TimeElapsed"), // ro
|
|
TEXT(""), TEXT("Interval"), MAX_LONG, 0, FALSE,
|
|
PROPERTY_READABLE, 2, NT_SYNTAX_ID_DWORD },
|
|
{ TEXT("PagesPrinted"), // ro
|
|
TEXT(""), TEXT("Integer"), MAX_LONG, 0, FALSE,
|
|
PROPERTY_READABLE, 2, NT_SYNTAX_ID_DWORD },
|
|
{ TEXT("Position"),
|
|
TEXT(""), TEXT("Integer"), MAX_LONG, 0, FALSE,
|
|
PROPERTY_RW, 2, NT_SYNTAX_ID_DWORD }
|
|
};
|
|
|
|
|
|
DWORD gdwJobTableSize = sizeof(PrintJobClass)/sizeof(PROPERTYINFO);
|
|
|
|
CLASSINFO g_aNWCOMPATClasses[] =
|
|
{
|
|
|
|
//
|
|
// Computer Class
|
|
//
|
|
|
|
|
|
|
|
{ COMPUTER_SCHEMA_NAME, &CLSID_NWCOMPATComputer, &IID_IADsComputer,
|
|
TEXT(""), FALSE,
|
|
|
|
NULL,
|
|
|
|
|
|
TEXT("OperatingSystemVersion"),
|
|
|
|
|
|
NULL, TEXT("User,Group,FileService,PrintQueue"), TRUE,
|
|
TEXT(""), 0,
|
|
ComputerClass, sizeof(ComputerClass)/sizeof(PROPERTYINFO) },
|
|
|
|
|
|
{ USER_SCHEMA_NAME, &CLSID_NWCOMPATUser, &IID_IADsUser,
|
|
TEXT(""), FALSE,
|
|
|
|
|
|
NULL,
|
|
|
|
|
|
TEXT("FullName,AccountDisabled,AccountExpirationDate,")
|
|
TEXT("AccountCanExpire,GraceLoginsAllowed,GraceLoginsRemaining,")
|
|
TEXT("IsAccountLocked,IsAdmin,MaxLogins,PasswordExpirationDate,")
|
|
TEXT("PasswordCanExpire,PasswordMinimumLength,PasswordRequired,")
|
|
TEXT("RequireUniquePassword,BadLoginAddress,LastLogin"),
|
|
|
|
|
|
TEXT("Computer"), NULL, FALSE,
|
|
TEXT(""), 0,
|
|
UserClass, sizeof(UserClass)/sizeof(PROPERTYINFO) },
|
|
|
|
|
|
{ GROUP_SCHEMA_NAME, &CLSID_NWCOMPATGroup, &IID_IADsGroup,
|
|
TEXT(""), FALSE,
|
|
|
|
|
|
NULL,
|
|
|
|
|
|
TEXT("Description"),
|
|
|
|
|
|
TEXT("Computer"), NULL, FALSE,
|
|
TEXT(""), 0,
|
|
GroupClass, sizeof(GroupClass)/sizeof(PROPERTYINFO) },
|
|
|
|
{ FILESERVICE_SCHEMA_NAME, &CLSID_NWCOMPATFileService, &IID_IADsFileService,
|
|
TEXT(""), FALSE,
|
|
|
|
|
|
NULL,
|
|
|
|
|
|
TEXT("HostComputer,MaxUserCount,"),
|
|
|
|
TEXT("Computer"), TEXT("FileShare"), TRUE,
|
|
TEXT(""), 0,
|
|
FileServiceClass, sizeof(FileServiceClass)/sizeof(PROPERTYINFO) },
|
|
|
|
{ FILESHARE_SCHEMA_NAME, &CLSID_NWCOMPATFileShare, &IID_IADsFileShare,
|
|
TEXT(""), FALSE,
|
|
|
|
NULL,
|
|
|
|
TEXT("Description,HostComputer,MaxUserCount"),
|
|
|
|
TEXT("FileService"), NULL, FALSE,
|
|
TEXT(""), 0,
|
|
FileShareClass, sizeof(FileShareClass)/sizeof(PROPERTYINFO) },
|
|
|
|
|
|
{ PRINTER_SCHEMA_NAME, &CLSID_NWCOMPATPrintQueue, &IID_IADsPrintQueue,
|
|
TEXT(""), FALSE,
|
|
|
|
NULL,
|
|
|
|
|
|
TEXT("PrinterPath,Model,Datatype,PrintProcessor,")
|
|
TEXT("Description,Location,StartTime,UntilTime,DefaultJobPriority,")
|
|
TEXT("Priority,BannerPage,PrintDevices"),
|
|
|
|
|
|
TEXT("Computer"), NULL, FALSE,
|
|
TEXT(""), 0,
|
|
PrintQueueClass, sizeof(PrintQueueClass)/sizeof(PROPERTYINFO) },
|
|
|
|
{ PRINTJOB_SCHEMA_NAME, &CLSID_NWCOMPATPrintJob, &IID_IADsPrintJob,
|
|
TEXT(""), FALSE,
|
|
|
|
|
|
NULL,
|
|
|
|
|
|
TEXT("HostPrintQueue,User,TimeSubmitted,TotalPages,")
|
|
TEXT("Size,Priority,StartTime,UntilTime,Notify,TimeElapsed,")
|
|
TEXT("PagesPrinted,Position"),
|
|
|
|
|
|
NULL, NULL, FALSE,
|
|
TEXT(""), 0,
|
|
PrintJobClass, sizeof(PrintJobClass)/sizeof(PROPERTYINFO) }
|
|
|
|
};
|
|
|
|
SYNTAXINFO g_aNWCOMPATSyntax[] =
|
|
{ { TEXT("Boolean"), VT_BOOL },
|
|
{ TEXT("Counter"), VT_I4 },
|
|
{ TEXT("ADsPath"), VT_BSTR },
|
|
{ TEXT("EmailAddress"), VT_BSTR },
|
|
{ TEXT("FaxNumber"), VT_BSTR },
|
|
{ TEXT("Integer"), VT_I4 },
|
|
{ TEXT("Interval"), VT_I4 },
|
|
{ TEXT("List"), VT_VARIANT }, // VT_BSTR | VT_ARRAY
|
|
{ TEXT("NetAddress"), VT_BSTR },
|
|
{ TEXT("OctetString"), VT_VARIANT }, // VT_UI1| VT_ARRAY
|
|
{ TEXT("Path"), VT_BSTR },
|
|
{ TEXT("PhoneNumber"), VT_BSTR },
|
|
{ TEXT("PostalAddress"), VT_BSTR },
|
|
{ TEXT("SmallInterval"), VT_I4 },
|
|
{ TEXT("String"), VT_BSTR },
|
|
{ TEXT("Time"), VT_DATE }
|
|
};
|
|
|
|
DWORD g_cNWCOMPATClasses = (sizeof(g_aNWCOMPATClasses)/sizeof(g_aNWCOMPATClasses[0]));
|
|
DWORD g_cNWCOMPATSyntax = (sizeof(g_aNWCOMPATSyntax)/sizeof(g_aNWCOMPATSyntax[0]));
|
|
|
|
PROPERTYINFO g_aNWCOMPATProperties[] =
|
|
{ { TEXT("OperatingSystem"), // ro
|
|
TEXT(""), TEXT("String"), MAX_STRLEN, 0, FALSE,
|
|
PROPERTY_RW, COMP_OPERATINGSYSTEM_ID, NT_SYNTAX_ID_LPTSTR},
|
|
{ TEXT("OperatingSystemVersion"), // ro
|
|
TEXT(""), TEXT("String"), MAX_STRLEN, 0, FALSE,
|
|
PROPERTY_RW, COMP_OPERATINGSYSTEMVERSION_ID, NT_SYNTAX_ID_LPTSTR},
|
|
|
|
// User Properties
|
|
|
|
{ TEXT("FullName"),
|
|
TEXT(""), TEXT("String"), NW_DATA_SIZE, 0, FALSE, // max 128 bytes
|
|
PROPERTY_RW, USER_FULLNAME_ID, NT_SYNTAX_ID_LPTSTR },
|
|
{ TEXT("AccountDisabled"),
|
|
TEXT(""), TEXT("Boolean"), MAX_BOOLEAN, 0, FALSE,
|
|
PROPERTY_RW, USER_ACCOUNTDISABLED_ID, NT_SYNTAX_ID_BOOL },
|
|
{ TEXT("AccountExpirationDate"),
|
|
TEXT(""), TEXT("Time"), 0, 0, FALSE,
|
|
PROPERTY_RW, USER_ACCOUNTEXPIRATIONDATE_ID, NT_SYNTAX_ID_NW312DATE },
|
|
{ TEXT("AccountCanExpire"),
|
|
TEXT(""), TEXT("Boolean"), MAX_BOOLEAN, 0, FALSE,
|
|
PROPERTY_RW, USER_CANACCOUNTEXPIRE_ID, NT_SYNTAX_ID_BOOL },
|
|
{ TEXT("GraceLoginsAllowed"),
|
|
TEXT(""), TEXT("Integer"), MAX_UCHAR, 0, FALSE,
|
|
PROPERTY_RW, USER_GRACELOGINSALLOWED_ID, NT_SYNTAX_ID_DWORD },
|
|
{ TEXT("GraceLoginsRemaining"),
|
|
TEXT(""), TEXT("Integer"), MAX_UCHAR, 0, FALSE,
|
|
PROPERTY_RW, USER_GRACELOGINSREMAINING_ID, NT_SYNTAX_ID_DWORD },
|
|
{ TEXT("IsAccountLocked"),
|
|
TEXT(""), TEXT("Boolean"), MAX_BOOLEAN, 0, FALSE,
|
|
PROPERTY_RW, USER_ISACCOUNTLOCKED_ID, NT_SYNTAX_ID_BOOL},
|
|
{ TEXT("IsAdmin"),
|
|
TEXT(""), TEXT("Boolean"), MAX_BOOLEAN, 0, FALSE,
|
|
PROPERTY_RW, USER_ISADMIN_ID, NT_SYNTAX_ID_BOOL},
|
|
{ TEXT("MaxLogins"),
|
|
TEXT(""), TEXT("Integer"), MAX_USHORT, 0, FALSE,
|
|
PROPERTY_RW, USER_MAXLOGINS_ID, NT_SYNTAX_ID_DWORD},
|
|
{ TEXT("PasswordExpirationDate"),
|
|
TEXT(""), TEXT("Time"), 0, 0, FALSE,
|
|
PROPERTY_RW, USER_PASSWORDEXPIRATIONDATE_ID, NT_SYNTAX_ID_NW312DATE},
|
|
{ TEXT("PasswordCanExpire"),
|
|
TEXT(""), TEXT("Boolean"), MAX_BOOLEAN, 0, FALSE,
|
|
PROPERTY_RW, USER_CANPASSWORDEXPIRE_ID, NT_SYNTAX_ID_BOOL },
|
|
{ TEXT("PasswordMinimumLength"),
|
|
TEXT(""), TEXT("Integer"), MAX_UCHAR, 0, FALSE,
|
|
PROPERTY_RW, USER_PASSWORDMINIMUMLENGTH_ID, NT_SYNTAX_ID_DWORD},
|
|
{ TEXT("PasswordRequired"),
|
|
TEXT(""), TEXT("Boolean"), MAX_BOOLEAN, 0, FALSE,
|
|
PROPERTY_RW, USER_PASSWORDREQUIRED_ID, NT_SYNTAX_ID_BOOL},
|
|
{ TEXT("RequireUniquePassword"),
|
|
TEXT(""), TEXT("Boolean"), MAX_BOOLEAN, 0, FALSE,
|
|
PROPERTY_RW, USER_REQUIREUNIQUEPASSWORD_ID, NT_SYNTAX_ID_BOOL},
|
|
{ TEXT("BadLoginAddress"), // ro
|
|
TEXT(""), TEXT("String"), MAX_STRLEN, 0, FALSE,
|
|
PROPERTY_READABLE, USER_BADLOGINADDRESS_ID, NT_SYNTAX_ID_LPTSTR},
|
|
{ TEXT("LastLogin"), // ro
|
|
TEXT(""), TEXT("Time"), 0, 0, FALSE,
|
|
PROPERTY_READABLE, USER_LASTLOGIN_ID, NT_SYNTAX_ID_NW312DATE},
|
|
|
|
// Group Properties
|
|
|
|
{ TEXT("Description"), // FSGroupGeneralInfo
|
|
TEXT(""), TEXT("String"), MAX_STRLEN, 0, FALSE, // max 128 bytes
|
|
PROPERTY_RW, GROUP_DESCRIPTION_ID, NT_SYNTAX_ID_LPTSTR },
|
|
|
|
// FileService Properties
|
|
|
|
{ TEXT("HostComputer"), // FSServiceConfiguration
|
|
TEXT(""), TEXT("ADsPath"), MAX_STRLEN, 0, FALSE,
|
|
PROPERTY_READABLE, 1, NT_SYNTAX_ID_LPTSTR },
|
|
{ TEXT("MaxUserCount"),
|
|
TEXT(""), TEXT("Integer"), MAX_USHORT, 0, FALSE,
|
|
PROPERTY_READABLE, 2, NT_SYNTAX_ID_DWORD },
|
|
|
|
// FileShare Properties
|
|
|
|
//
|
|
// Description (Group)
|
|
//
|
|
// HostComputer (FileService)
|
|
//
|
|
// MaxUserCount(FileService)
|
|
//
|
|
|
|
// PrintQueue Properties
|
|
|
|
//
|
|
// HostComputer (FileService)
|
|
//
|
|
{ TEXT("Model"),
|
|
TEXT(""), TEXT("String"), MAX_STRLEN, 0, FALSE,
|
|
PROPERTY_RW, 2, NT_SYNTAX_ID_LPTSTR },
|
|
{ TEXT("Datatype"),
|
|
TEXT(""), TEXT("String"), MAX_STRLEN, 0, FALSE,
|
|
PROPERTY_RW, 2, NT_SYNTAX_ID_LPTSTR },
|
|
{ TEXT("PrintProcessor"),
|
|
TEXT(""), TEXT("String"), MAX_STRLEN, 0, FALSE,
|
|
PROPERTY_RW, 2, NT_SYNTAX_ID_LPTSTR },
|
|
//
|
|
// Description (Group)
|
|
//
|
|
{ TEXT("Location"),
|
|
TEXT(""), TEXT("String"), MAX_STRLEN, 0, FALSE,
|
|
PROPERTY_RW, 2, NT_SYNTAX_ID_LPTSTR },
|
|
{ TEXT("StartTime"),
|
|
TEXT(""), TEXT("Time"), 0, 0, FALSE,
|
|
PROPERTY_RW, 2, NT_SYNTAX_ID_DATE },
|
|
{ TEXT("UntilTime"),
|
|
TEXT(""), TEXT("Time"), 0, 0, FALSE,
|
|
PROPERTY_RW, 2, NT_SYNTAX_ID_DATE },
|
|
{ TEXT("DefaultJobPriority"),
|
|
TEXT(""), TEXT("Integer"), MAX_LONG, 0, FALSE,
|
|
PROPERTY_RW, 2, NT_SYNTAX_ID_DWORD },
|
|
{ TEXT("Priority"),
|
|
TEXT(""), TEXT("Integer"), MAX_LONG, 0, FALSE,
|
|
PROPERTY_RW, 2, NT_SYNTAX_ID_DWORD },
|
|
{ TEXT("BannerPage"),
|
|
TEXT(""), TEXT("Path"), MAX_STRLEN, 0, FALSE,
|
|
PROPERTY_RW, 2, NT_SYNTAX_ID_LPTSTR },
|
|
{ TEXT("PrintDevices"),
|
|
TEXT(""), TEXT("String"), MAX_STRLEN, 0, TRUE,
|
|
PROPERTY_RW, 2, NT_SYNTAX_ID_DelimitedString },
|
|
|
|
// PrintJob Properties
|
|
|
|
{ TEXT("HostPrintQueue"), // ro, FSPrintJobGeneralInfo
|
|
TEXT(""), TEXT("ADsPath"), MAX_STRLEN, 0, FALSE,
|
|
PROPERTY_READABLE, 1, NT_SYNTAX_ID_LPTSTR },
|
|
{ TEXT("User"), // ro
|
|
TEXT(""), TEXT("String"), MAX_STRLEN, 0, FALSE,
|
|
PROPERTY_READABLE, 1, NT_SYNTAX_ID_LPTSTR },
|
|
{ TEXT("TimeSubmitted"), // ro
|
|
TEXT(""), TEXT("Time"), 0, 0, FALSE,
|
|
PROPERTY_READABLE, 1, NT_SYNTAX_ID_SYSTEMTIME },
|
|
{ TEXT("TotalPages"), // ro
|
|
TEXT(""), TEXT("Integer"), MAX_LONG, 0, FALSE,
|
|
PROPERTY_READABLE, 1, NT_SYNTAX_ID_DWORD },
|
|
{ TEXT("Size"), // ro
|
|
TEXT(""), TEXT("Integer"), MAX_LONG, 0, FALSE,
|
|
PROPERTY_READABLE, 2, NT_SYNTAX_ID_DWORD },
|
|
//
|
|
// Description (Group)
|
|
//
|
|
// Priority (PrintQueue)
|
|
//
|
|
//
|
|
// StartTime (PrintQueue)
|
|
//
|
|
// UntilTime(PrintQueue)
|
|
//
|
|
{ TEXT("Notify"),
|
|
TEXT(""), TEXT("String"), MAX_STRLEN, 0, FALSE,
|
|
PROPERTY_RW, 2, NT_SYNTAX_ID_LPTSTR },
|
|
{ TEXT("TimeElapsed"), // ro
|
|
TEXT(""), TEXT("Interval"), MAX_LONG, 0, FALSE,
|
|
PROPERTY_READABLE, 2, NT_SYNTAX_ID_DWORD },
|
|
{ TEXT("PagesPrinted"), // ro
|
|
TEXT(""), TEXT("Integer"), MAX_LONG, 0, FALSE,
|
|
PROPERTY_READABLE, 2, NT_SYNTAX_ID_DWORD },
|
|
{ TEXT("Position"),
|
|
TEXT(""), TEXT("Integer"), MAX_LONG, 0, FALSE,
|
|
PROPERTY_RW, 2, NT_SYNTAX_ID_DWORD }
|
|
|
|
};
|
|
|
|
|
|
DWORD g_cNWCOMPATProperties = (sizeof(g_aNWCOMPATProperties)/sizeof(g_aNWCOMPATProperties[0]));
|
|
|
|
|
|
|