Системное программирование в среде Windows - [210]

Шрифт
Интервал

• lsFP.с — программа 15.2.

• InitUnFp.c — код для программ 15.3, 15.4 и 15.5. Эти функции нужны программам 15.1 и 15.2. Кроме того, в исходном модуле содержится код, показывающий, как получить имя группы-владельца, что вам предлагается самостоятельно сделать в упражнении 15.12. 

• TestFp.c — дополнительная тестовая программа, которая оказалась полезной в процессе тестирования.

• serverNP_secure.с — программа 15.6.

• JobShell_secure.c и JobMgt_secure.с — усовершенствованные варианты программ для системы управления заданиями, которая рассматривается в главе 6.

Глава 16

Для этой главы предусмотрен только один файл с исходным кодом, а именно, sortMM64.c, который представляет собой программу sortMM.c из главы 5, усовершенствованную таким образом, чтобы она могла выполняться на обеих платформах Win32 и Win64.

Листинги включаемых файлов

EvryThng.h
Программа А.1. Заголовочный файл EvryThng.h 

>/* EvryThng.h – Включает все стандартные и пользовательские */

>/* заголовочные файлы. */

>#include "Exclude.h" /* Исключает описания, которые не требуются для примеров программ.*/

>#include "envirmnt.h"

>#include

>#include

>#include

>#include

>#include "support.h"

>#ifdef _MT

>#include

>/* DWORD_PTR (целое без знака, соответствующее точности указателя)

> * используется для целых чисел, преобразуемых в дескрипторы или указатели.

> * Благодаря этому в Win64 не будут выводиться предупреждающие сообщения,

> * касающиеся взаимных преобразований 32-битовых и 64-битовых данных,

> * поскольку в Win64 дескрипторы HANDLE и указатели являются 64-битовыми

> * (см. главу 16). Этот режим активизируется только в том случае,

> * если определена символическая константа _Wp64.

> */

>#if !defined(_Wp64)

>#define DWORD_PTR DWORD

>#define LONG_PTR LONG

>#define INT_PTR INT

>#endif 

Envirmnt.h
Программа А.2. Включаемый файл Envirmnt.h 

>/* Envirmnt.h — Здесь определяются константы UNICODE и _МТ. */

>/* Лучше и проще определить константу UNICODE в проекте. */

>/* Используйте команды меню: Project…Settings…C/C++. Затем, перейдя */

>/* в окно Project Options, добавьте в нижней части: /D "UNICODE". */

>/* Проделайте то же самое для констант _МТ и _STATIC_LIB. */


>//#define UNICODE

>#undef UNICODE

>#ifdef UNICODE

>#define _UNICODE

>#endif

>#ifndef UNICODE

>#undef _UNICODE

>#endif

>//#define _STATICLIB

>/* Определите _STATICLIB, если создаете */

>/* или компонуете статическую библиотеку. */

>#define LANG_DFLT LANG_ENGLISH

>#define SUBLANG_DFLT SUBLANG_ENGLISH_US

Support.h
Программа А.З. Включаемый файл Support.h 

>/* Support.h */

>/* Содержит определения всех символических констант и распространенных служебных функций, используемых в примерах программ. */

>/* НЕСМОТРЯ НА ВКЛЮЧЕНИЕ ОПИСАНИЙ КОНСТАНТ UTILITY_EXPORTS И _STATICLIB, ИХ ЛУЧШЕ ОПРЕДЕЛЯТЬ НЕ ЗДЕСЬ, А В ПРОЕКТЕ. */

>/* Имя "UTILITY_EXPORTS" генерируется средой разработки Visual Studio, если вы создаете проект DLL с именем "Utility", но его также можно определить в командной строке С. */

>// 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);


>/* Константы, которые требуются для функций безопасности. */


Рекомендуем почитать
Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание

Сценарии командной оболочки помогают системным администраторам и программистам автоматизировать рутинные задачи с тех самых пор, как появились первые компьютеры. С момента выхода первого издания этой книги в 2004 году многое изменилось, однако командная оболочка bash только упрочила свои лидирующие позиции. Поэтому умение использовать все ее возможности становится насущной необходимостью для системных администраторов, инженеров и энтузиастов. В этой книге описываются типичные проблемы, с которыми можно столкнуться, например, при сборке программного обеспечения или координации действий других программ.


Безопасность информационных систем

В пособии излагаются основные тенденции развития организационного обеспечения безопасности информационных систем, а также подходы к анализу информационной инфраструктуры организационных систем и решению задач обеспечения безопасности компьютерных систем.Для студентов по направлению подготовки 230400 – Информационные системы и технологии (квалификация «бакалавр»).


UNIX — универсальная среда программирования

В книге американских авторов — разработчиков операционной системы UNIX — блестяще решена проблема автоматизации деятельности программиста, системной поддержки его творчества, выходящей за рамки языков программирования. Профессионалам открыт богатый "встроенный" арсенал системы UNIX. Многочисленными примерами иллюстрировано использование языка управления заданиями shell.Для программистов-пользователей операционной системы UNIX.


QNX/UNIX: Анатомия параллелизма

Книга адресована программистам, работающим в самых разнообразных ОС UNIX. Авторы предлагают шире взглянуть на возможности параллельной организации вычислительного процесса в традиционном программировании. Особый акцент делается на потоках (threads), а именно на тех возможностях и сложностях, которые были привнесены в технику параллельных вычислений этой относительно новой парадигмой программирования. На примерах реальных кодов показываются приемы и преимущества параллельной организации вычислительного процесса.


Виртуальные  машины: несколько компьютеров в  одном

Применение виртуальных машин дает различным категориям пользователей — от начинающих до IT-специалистов — множество преимуществ. Это и повышенная безопасность работы, и простота развертывания новых платформ, и снижение стоимости владения. И потому не случайно сегодня виртуальные машины переживают второе рождение.В книге рассмотрены три наиболее популярных на сегодняшний день инструмента, предназначенных для создания виртуальных машин и управления ими: Virtual PC 2004 компании Microsoft, VMware Workstation от компании VMware и относительно «свежий» продукт — Parallels Workstation, созданный в компании Parallels.


Недокументированные и малоизвестные возможности Windows XP

Книга содержит подробные сведения о таких недокументированных или малоизвестных возможностях Windows XP, как принципы работы с программами rundll32.exe и regsvr32.exe, написание скриптов сервера сценариев Windows и создание INF-файлов. В ней приведено описание оснасток, изложены принципы работы с консолью управления mmc.exe и параметрами реестра, которые изменяются с ее помощью. Кроме того, рассмотрено большое количество средств, позволяющих выполнить тонкую настройку Windows XP.Эта книга предназначена для опытных пользователей и администраторов, которым интересно узнать о нестандартных возможностях Windows.