Локальные сети персональных компьютеров. Работа с сервером Novell NetWare

       

Программа DIRSCAN


С помощью программы DIRSCAN вы сможете получить список подкаталогов для каталога, путь к которому задан в качестве параметра при запуске программы.

Для преобразования идентификатора пользователя, создавшего каталог,

в имя мы использовали функцию GetBinderyObjectName() из библиотеки NetWare C Interface:

int GetBinderyObjectName(long ObjectID, char *ObjectName, WORD *ObjectType);

Функция ищет в базе объектов запись с идентификатором ObjectID и в случае успеха записывает в переменные, адресуемые параметрами ObjectName и ObjectType, имя и тип объекта. В случае успешного поиска функция возвращает нулевое значение.

Итак, исходный текст программы DIRSCAN:

// =================================================== // Листинг 11. Просмотр списка подкаталогов // сетевого каталога // Файл dirscan\dirscan.cpp // // (C) A. Frolov, 1993 // ===================================================

#include <stdlib.h> #include <stdio.h> #include <string.h> #include <time.h>

#define BYTE unsigned char #define WORD unsigned int

extern "C" int GetNetWareShellVersion(char *,char *, char *); extern "C" int ScanDirectoryInformation(BYTE, char *, int *, char *, BYTE *, long *, BYTE *); extern "C" int GetBinderyObjectName(long, char *, WORD *);

void main(int argc, char *argv[]) {

char MajorVersion=0; char MinorVersion=0; char Revision=0;

int SequenceNumber; char DirectoryName[16]; BYTE CreationDataAndTime[4]; long OwnerObjectID; BYTE RightsMask; int ccode;



char ObjectName[48]; WORD ObjectType;

printf("\n*DIRSCAN* (C) Frolov A., 1993\n");

// Проверяем наличие сетевой оболочки

asm push si GetNetWareShellVersion(&MajorVersion, &MinorVersion, &Revision); asm pop si

if(MajorVersion == 0) { printf("\nОболочка NetWare не загружена\n"); return; } // В качестве аргумента необходимо задать // путь к просматриваемому каталогу в виде SYS:USERS\*

if(argc < 2) { printf("Укажите путь к каталогу, " "например: dirscan sys:users\\*\n"); return; } printf("Содержимое каталога %s\n", argv[1]); printf("--------------------------------------------\n"); printf("Имя \tКто владелец каталога\n"); printf("--------------------------------------------\n");


// Путь должен быть задан заглавными буквами

strupr(argv[1]);

// Цикл просмотра каталога

for(SequenceNumber = 0;;) {

// Получаем информацию о содержимом каталога

ccode = ScanDirectoryInformation(0, argv[1], &SequenceNumber, DirectoryName, CreationDataAndTime, &OwnerObjectID, &RightsMask);

// Если были ошибки или каталог пуст, завершаем цикл

if(ccode) break; if(DirectoryName[0] == '\0') break;

// Выводим имя каталога

printf("%-12s", DirectoryName);

// Если для каталога определен владелец, // получаем и выводим имя владельца

if(OwnerObjectID) { GetBinderyObjectName(OwnerObjectID, ObjectName, &ObjectType); printf("\t%-12s \n", ObjectName); } else printf("\t <Нет сведений о владельце> \n"); } }


Содержание раздела