• 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 – Включает все стандартные и пользовательские */
/* заголовочные файлы. */
#include "Exclude.h" /* Исключает описания, которые не требуются для примеров программ.*/
#include "envirmnt.h"
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#include <io.h>
#include "support.h"
#ifdef _MT
#include <process.h>
/* 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);