Джонсон Харт - Системное программирование в среде Windows
- Название:Системное программирование в среде Windows
- Автор:
- Жанр:
- Издательство:Издательский дом Вильямс
- Год:2005
- Город:Москва • Санкт-Петербург • Киев
- ISBN:5-8459-0879-5
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Джонсон Харт - Системное программирование в среде Windows краткое содержание
Эта книга посвящена вопросам разработки приложений с использованием интерфейса прикладного программирования операционных систем компании Microsoft (Windows 9х, Windows XP, Windows 2000 и Windows Server 2003). Основное внимание уделяется базовым системным службам, включая управление файловой системой, процессами и потоками, взаимодействие между процессами, сетевое программирование и синхронизацию. Рассматривается методика переноса приложений, написанных в среде Win32, в среду Win64. Подробно описываются все аспекты системы безопасности Windows и ее практического применения. Изобилие реальных примеров, доступных также и на Web-сайте книги, существенно упрощает усвоение материала.
Книга ориентирована на разработчиков и программистов, как высокой квалификации, так и начинающих, а также будет полезна для студентов соответствующих специальностей.
Системное программирование в среде Windows - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
// UTILITY_3_0_EXPORTS определяется в проекте UTILITY_3_0.
#if defined(UTILITY_3_0_EXPORTS)
#define LIBSPEC _declspec(dllexport)
#elif defined(__cplusplus)
#define LIBSPEC extern "C" _declspec(dllimport)
#else
#define LIBSPEC _declspec(dllimport)
#endif
#define EMPTY _T("")
#define YES _T("y")
#define NO _T("n")
#define CR 0x0D
#define LF 0x0A
#define TSIZE sizeof(TCHAR)
/* Предельные значения и константы. */
#define TYPE_FILE 1 /* Используется в ls, rm, и lsFP. */
#define TYPE_DIR 2
#define TYPE_DOT 3
#define MAX_OPTIONS 20 /* Максимальное количество параметров командной строки.*/
#define MAX_ARG 1000 /* Максимальное количество аргументов командной строки.*/
#define MAX_COMMAND_LINE MAX_PATH+50 /*Максимальный размер командной строки*/
/* Часто используемые функции. */
LIBSPEC BOOL ConsolePrompt(LPCTSTR, LPTSTR, DWORD, BOOL);
LIBSPEC BOOL PrintStrings(HANDLE, ...);
LIBSPEC BOOL PrintMsg(HANDLE, LPCTSTR);
LIBSPEC VOID ReportError(LPCTSTR, DWORD, BOOL);
LIBSPEC VOID ReportException(LPCTSTR, DWORD);
LIBSPEC DWORD Options(int, LPCTSTR *, LPCTSTR, ...);
LIBSPEC LPTSTR SkipArg(LPCTSTR);
LIBSPEC VOID GetArgs(LPCTSTR, int *, LPTSTR *);
/* Набор функций для работы с обобщенными строками в стиле string.h. Создавались по мере необходимости – первоначально была только одна функция! Реализация взята из [27]. */
LIBSPEC LPCTSTR wmemchr(LPCTSTR, TCHAR, DWORD);
#ifdef _UNICODE /* Это объявление уже должно было быть добавлено. */
#define _tstrrchr wcsrchr
#else
#define _tstrrchr strrchr
#endif
#ifdef _UNICODE /* Это объявление уже должно было быть добавлено. */
#define _memtchr wmemchr
#else
#define _memtchr memchr
#endif
/* Функции безопасности. */
LPSECURITY_ATTRIBUTES InitializeUnixSA(DWORD, LPTSTR, LPTSTR, LPDWORD, LPHANDLE);
LPSECURITY_ATTRIBUTES InitializeAccessOnlySA(DWORD, LPTSTR, LPTSTR, LPDWORD, LPHANDLE);
DWORD ReadFilePermissions(LPTSTR, LPTSTR, LPTSTR);
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 — Определения, необходимые для управления задачами. Глава 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);
/* Определения для программ, обеспечивающих клиент-серверное взаимодействие*/
/* Сообщения запроса и ответа. Сообщения имеют кодировку 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);
В программе А.6 определяются многочисленные переменные, позволяющие исключить определения, которые не требуются для примеров программ, приведенных в данной книге. Этот вопрос подробно обсуждается в [30].
/* 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.
Эта функция просматривает командную строку в поиске слов, начинающихся с символа "-" (дефис), проверяет отдельные символы и устанавливает булевские параметры. Хотя эта функция и аналогична UNIX-функции getopt, она обладает меньшими возможностями.
/* Служебная функция для извлечения флагов опций из командной строки. */
Интервал:
Закладка: