Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

516 lines
18 KiB

#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]));