BOOL ChangeFilePermissions(DWORD, LPTSTR, LPDWORD, LPDWORD);
/* В упрощенной форме доступны в Visual C++ Version 5.0. */
//PSECURITY_DESCRIPTOR InitializeSD(DWORD, LPTSTR, LPTSTR, LPDWORD);
/* Константы, которые требуются для функций безопасности. */
#define LUSIZE 1024
#define ACCT_NAME_SIZE LUSIZE
JobMgt.h Программа А.4. Включаемый файл JobMgt.h/* JobMgt.h — Определения, необходимые для управления задачами. Глава 6. */
/* Код выхода для программы управления задачами в случае прекращения их выполнения. */
#define JM_EXIT_CODE 0x1000
typedef struct _JM_JOB {
DWORD ProcessId;
TCHAR CommandLine[MAX_PATH];
} JM_JOB;
#define SJM_JOB sizeof (JM_JOB)
/* Функции управления задачами. */
DWORD GetJobNumber(PROCESS_INFORMATION *, LPCTSTR);
BOOL DisplayJobs(void);
DWORD FindProcessId(DWORD);
BOOL GetJobMgtFileName(LPTSTR);
ClntSrvr.h Программа А.5. Включаемый файл ClntSrvr.h/* Определения для программ, обеспечивающих клиент-серверное взаимодействие*/
/* Сообщения запроса и ответа. Сообщения имеют кодировку ASCII, поскольку запрос может поступать от системы Windows 95. */
#define MAX_RQRS_LEN 0x1000
typedef struct {
DWORD32 RqLen; /* Размер структуры запроса, исключая размер этого поля. */
CHAR Command;
BYTE Record[MAX_RQRS_LEN];
} REQUEST;
typedef struct {
DWORD32 RsLen; /* Размер структуры ответа, исключая размер этого поля*/
CHAR Status;
BYTE Record[MAX_RQRS_LEN];
} RESPONSE;
#define RQ_SIZE sizeof(REQUEST)
#define RQ_HEADER_LEN RQ_SIZE-MAX_RQRS_LEN
#define RS_SIZE sizeof(RESPONSE)
#define RS_HEADER_LEN RS_SIZE-MAX_RQRS_LEN
/* Структура почтового сообщения. */
typedef struct {
DWORD msStatus;
DWORD msUtilization;
TCHAR msName[MAX_PATH];
} MS_MESSAGE;
#define MSM_SIZE sizeof(MS_MESSAGE)
#define CS_TIMEOUT 5000 /* Интервал ожидания для взаимодействия через именованный канал и мониторинга производительности. */
#define MAXCLIENTS 10
#define MAX_SERVER_TH 4 /* Максимальное количество серверных потоков для программы serverNPCP.*/
#define MAX_CLIENTS_CP 16 /* Максимальное количество клиентов для программы serverNPCP.*/
/* Имена серверных и клиентских каналов и почтовых ящиков. */
#define SERVER_PIPE _Т("\\\\.\\PIPE\\SERVER")
#define CLIENT_PIPE _T("\\\\.\\PIPE\\SERVER")
#define SERVERBROADCAST _T("SrvrBcst.exe")
#define MS_SRVNAME _T("\\\\.\\MAILSLOT\\CLS_MAILSLOT")
#define MS_CLTNAME _T("\\\\.\\MAILSLOT\\CLS_MAILSLOT")
#define MX_NAME _T("ClientServerMutex")
#define SM_NAME _T("ClientServerSemaphore")
/* Команды для функции поддержки статистики. */
#define CS_INIT 1
#define CS_RQSTART 2
#define CS_RQCOMPLETE 3
#define CS_REPORT 4
#define CS_TERMTHD 5
/* Функции поддержки клиент-серверной системы. */
BOOL LocateServer(LPTSTR);
Exclude.hВ программе А.6 определяются многочисленные переменные, позволяющие исключить определения, которые не требуются для примеров программ, приведенных в данной книге. Этот вопрос подробно обсуждается в [30].
Программа А.6. Включаемый файл Exclude.h/* Exclude.h — Определения переменных для исключения ненужных заголовочных файлов. За дополнительными разъяснениями обратитесь в [30]. */
#define WIN32_LEAN_AND_MEAN
/* Весьма эффективная мера, уменьшающая размер предварительно скомпилированного заголовочного файла (pch) почти в два раза. */
/* Эти определения также уменьшают размер pch-файла и уменьшают время компиляции. Все программы в данной книге будут компилироваться с этими определениями. От использования средств защиты можно отказаться при помощи оператора #define NOSECURITY. */
#define NOATOM
#define NOCLIPBOARD
#define NOCOMM
#define NOCTLMGR
#define NOCOLOR
#define NODEFERWINDOWPOS
#define NODESKTOP
#define NODRAWTEXT
#define NOEXTAPI
#define NOGDICAPMASKS
#define NOHELP
#define NOICONS
#define NOTIME
#define NOIMM
#define NOKANJI
#define NOKERNEL
#define NOKEYSTATES
#define NOMCX
#define NOMEMMGR
#define NOMENUS
#define NOMETAFILE
#define NOMSG
#define NONCMESSAGES
#define NOPROFILER
#define NORASTEROPS
#define NORESOURCE
#define NOSCROLL
#define NOSERVICE
#define NOSHOWWINDOW
#define NOSOUND
#define NOSYSCOMMANDS
#define NOSYSMETRICS
#define NOSYSPARAMS
#define NOTEXTMETRIC
#define NOVIRTUALKEYCODES
#define NOWH
#define NOWINDOWSTATION
#define NOWINMESSAGES
#define NOWINOFFSETS
#define NOWIMSTYLES
#define OEMRESOURCE
Дополнительные служебные программы
Имеются три дополнительных программы, а именно, Options, SkipArg и GetArgs, которые достаточно полезны, чтобы привести здесь их листинги. В то же время, ни одна из этих программ не привязана жестко к Win32.
Options.сЭта функция просматривает командную строку в поиске слов, начинающихся с символа "-" (дефис), проверяет отдельные символы и устанавливает булевские параметры. Хотя эта функция и аналогична UNIX-функции getopt, она обладает меньшими возможностями.
Программа А.7. Функция Options/* Служебная функция для извлечения флагов опций из командной строки. */
#include "EvryThng.h"
#include <stdarg.h>
DWORD Options(int argc, LPCTSTR argv[], LPCTSTR OptStr, ...)
/* argv — командная строка. Параметры (опции), если они нужны, начинаются с символа '-' в argv[1], argv[2], ….