Главная страница

Программирование в сетях Windows. Э. Джонс, Д. Оланд


Скачать 2.88 Mb.
НазваниеЭ. Джонс, Д. Оланд
АнкорПрограммирование в сетях Windows.pdf
Дата12.10.2017
Размер2.88 Mb.
Формат файлаpdf
Имя файлаПрограммирование в сетях Windows.pdf
ТипКнига
#9346
страница43 из 50
1   ...   39   40   41   42   43   44   45   46   ...   50
ГЛАВА 16 Клиент службы RAS 525
Листинг 16-3. (продолжение)
II Установка новой записи телефонного справочника "Testentry",
// используя стандартные свойства if ((Ret = RasSetEntryProperties(NULL, "Testentry",
lpRasEntry, EntrylnfoSize, lpDevicelnfo,
DevicelnfoSize)) != 0)
printfC'RasSetEntryProperties failed with error Xd\n",
a
Ret);
return;
}
}
Переименование записи телефонного справочника
Теперь рассмотрим функцию RasRenameEntry, которая позволяет переиме- новать записи телефонного справочника:
DWORD RasRenameEntry(
x
LPCTSTR lpszPhonebook, '' '
LPCTSTR lpszOldEntry, -'. j t«
LPCTSTR lpszNewEntry
Параметр lpszPhonebook указывает на имя файла телефонного справоч- ника, a lpszOldEntry — на строку, идентифицирующую существующую запись,
которую вы намерены переименовать. Параметр lpszNewEntry — указатель на строку, содержащую новое имя для записи телефонного справочника. При- ложение должно вызвать функцию RasValidateEntryName для нового имени перед вызовом RasRenameEntry. Если RasRenameEntry выполняется успешно,
она возвращает 0. Если же происходит сбой, она возвращает следующие
ТИПЫ ОШИбОК:
ERRORINVAHDNAME — имя, переданное в lpszNewEntry, неверно;
Ш ERRORALREADYEXISTS — имя, переданное в lpszNewEntry, уже есть в телефонном справочнике;
Ш ERROR CANNOT FIND PHONEBOOKENTRY - в телефонном справоч- нике не найдено имя, указанное в lpszOldEntry.
Удаление записей из телефонного справочника
Чтобы удалить записи из телефонного справочника, вызовите функцию
RasDeleteEntry-.
DWORD RasDeleteEntry(
LPCTSTR lpszPhonebook,
LPCTSTR lpszEntry

5 2 6 ЧАСТЬ III Служба удаленного доступа (RAS)
Параметр ipszPhonebook — указатель на имя файла телефонного справоч- ника. Параметр ipszEntry — строка, представляющая существующую запись справочника. Если функция выполняется успешно, она возвращает ERROR_
SUCCESS, если нет — ошибку ERRORJNVAUDJ4AME.
Перечисление записей телефонного справочника *
В RAS предусмотрена удобная функция RasEnumEntries, которая выводит за- писи телефонного справочника, доступные в его файле: }
DWORD RasEnumEntries (
LPCTSTR reserved,
LPCTSTR IpszPhonebook,
LPRASENTRYNAME lprasentryname,
LPDWORD lpcb, *
LPDWORD lpcEntries
); 'I
Параметр reserved не используется и должен быть равен NULL. Параметр
IpszPhonebook указывает на файл телефонного справочника, a lprasentryname
на буфер приложения, который нужно предусмотреть для получения мас- сива структур RASENTRYNAME:
typedef struct .RASENTRYNAME •*
{ •»
DWORD dwSize; Л
TCHAR szEntryName[RAS_MaxEntryName + 1];
#if (WINVER >= 0x500)
DWORD dwFlags;
!I
CHAR szPhonebookPath[MAX_PATH + 1 ] ;
H
#endif >
} RASENTRYNAME; ^
Вот описание полей этой структуры:
Ш dwSize — перед вызовом RasEnumEntries нужно присвоить этому полю размер (в байтах) структуры RASENTRYNAME;
Ш szEntryName — имя записи телефонного справочника;
dwFlags в Windows 2000 показывает, присутствует ли строка телефон- ного справочника в системном телефонном справочнике, заданном по умолчанию с помощью флага REN_AUUsers, или в профильном пользова- тельском телефонном справочнике, заданном с помощью флага RENUser,
Ш szPhonebookPatb в Windows 2000 определяет полный путь к файлу телефонного справочника.
Необходимо предусмотреть достаточно большой буфер для хранения нескольких структур, иначе RasEnumEntries даст сбой с ошибкой ERROR_
BUFFER_TOO_SMALL. Следующий параметр — lpcb, указатель на переменную,
получающую количество байт, необходимых для перечисления записей. Не- обходимо присвоить этому параметру значение, соответствующее размеру
(в байтах) буфера lprasentryname. Последний параметр — lpcEntries, указы-

ГЛАВА 16 Клиент службы RAS 527
вает на переменную, которая получает количество структур RASENTRYNAA1E
записываемых в буфер Iprasentryname.
Управление реквизитами пользователя
Когда клиент RAS устанавливает соединение, используя запись телефо.шо- го справочника через RasDial, он сохраняет реквизиты безопасности пользо- вателей и ассоциирует их с записями телефонного справочника. Функции
RasGetCredentials, RasSetCredentials, RasGetEntryDialParams и RasSetEntryDial-
Params позволяют организовать реквизиты безопасности пользователей,
ассоциируемых с записями телефонного справочника. Функции RasGet-
Credentials и RasSetCredentials были внедрены в Windows NT 4, они также доступны в Windows 2000. Эти две функции заменяют RasGetEntryDialParams
и RasSetEntryDialParams. Поскольку RasGetCredentials и RasSetCredentials не доступны в Windows 9х и СЕ, вы можете использовать RasGetEntryDialParams
и RasSetEntryDialParams для этой цели на всех платформах.
Функция RasGetCredentials выводит реквизиты пользователя, связанные с записью телефонного справочника:
DWORD RasGetCredentials(
LPCTSTR lpszPhonebook,
LPCTSTR lpszEntry,
LPRASCREDENTIALS lpCredentials
);
Параметр lpszPhonebook — указатель на имя файла телефонного справоч- ника. Параметр lpszEntry — строка, представляющая существующую запись справочника. Параметр lpCredentials указывает на структуру, которая может получать имя пользователя, пароль и домен, ассоциируемые с записью те- лефонного справочника: ,
м
typedef struct {
DWORD dwSize;
DWORD dwMask;
TCHAR szUserName[UNLEN + 1];
TCHAR szPassword[PWLEN + 1];
TCHAR szDomain[DNLEN + 1 ] ;
} RASCREDENTIALS, «LPRASCREDENTIALS;
Поля этой структуры определяются следующим образом:
М dwSize всегда: размер (в байтах) структуры RASCREDENTIALS;
Ш dwMask — поле битовой маски идентифицирует соответствие: флага
RASCMJUserName — полю szUserName, флага RASCM_Password — полю
szPassword, флага RASCMJDomain — полю szDomain.
Ш szUserName содержит имя пользователя для входа в систему, заверша- ется /0;
Ш szPassword содержит пароль пользователя для входа в систему, за- вершается /0;

528 ЧАСТЬ III Служба удаленного доступа (RAS)
Ш szDomain — содержит домен для входа пользователя в систему, заверша- ется /О
Если RasGetCredentials выполняется успешно, то она возвращает 0 При- ложение способно определить, какие реквизиты безопасности заданы в со- ответствии с полем divMask структуры IpCredentials
Функция RasSetCredentials подобна RasGetCredentials, за исключением того, что позволяет изменять реквизиты безопасности, связанные с записью телефонного справочника Кроме того, RasSetCredentials обладает дополни- тельным параметром —/Clear-Credentials
DWORD RasSetCredentials(
LPCTSTR lpszPhonebook,
LPCTSTR lpszEntry,
LPRASCREDENTIALS IpCredentials,
BOOL fClearCredentials
),
Параметр fClearCredentials — это логический оператор Если он равен
TRUE, то функция RasSetCredentials заменяет реквизиты, указанные в поле
dwMask структуры IpCredentials, на пустые строки (<») Например, если поле
dtvMask содержит флаг RASCM_Password, то заданный пароль заменяется на пустую строку Если функция RasSetCredentials выполняется успешно, то она возвращает О
Также для организации реквизитов безопасности пользователя, связан- ных с записью телефонного справочника, вы можете использовать RasGet-
EntryDialParams и RasSetEntryDialParams
DWORD RasGetEntryDialParams(
LPCTSTR lpszPhonebook,
LPRASDIALPARAMS lprasdialparams, <'
зд
LPBOOL lpfPassword ,-^j
Параметр lpszPhonebook указывает на имя файла телефонного справоч- ника, a lprasdialparams — на структуру RASDIALPARAMS Параметр ipfPassword
это логический флаг, который возвращает TRUE, если пароль пользователя был получен в структуре lprasdialparams
Функция RasSetEntryDialParams изменяет информацию о соединении,
которая была задана при последнем вызове RasDial для конкретной записи телефонного справочника
DWORD RasSetEntryDialParams(
LPCTSTR lpszPhonebook,
LPRASDIALPARAMS lprasdialparams,
BOOL fRemovePassword
),
Параметры lpszPhonebook и lprasdialparams такие же, как и в RasGetEntry-
DialParams Параметр fRemovePassword — это логический флаг Если он ра- вен TRUE, то RasSetEntryDialParams удаляет пароль, ассоциируемый с запи- сью телефонного справочника, которая указана в структуре lprasdialparams

ГЛАВА 16 Клиент службы RAS 529
Многоканальные подзаписи телефонного справочника
В Windows 2000 и NT RAS позволяет организовать многоканальные подза- писи телефонного справочника для усовершенствования возможностей со- единения Многоканальные соединения дают возможность использовать более одного устройства для соединения, ассоциируемого с RAS-соединени- ем Это помогает увеличить общую пропускную способность соединения
Организовывать многоканальные подзаписи можно с помощью функций
RasGetSubEntryProperties и RasSetSubEntryProperties
DWORD RasGetSubEntryProperties(
LPCTSTR lpszPhonebook,
LPCTSTR lpszEntry,
DWORD dwSubEntry,
LPRASSUBENTRY lpRasSubEntry,
LPDWORD lpdwcb,
LPBYTE lpbDeviceConfig,
LPDWORD lpcbDevioeConfig
),
Параметр lpszPhonebook — указатель на имя файла телефонного справоч- ника Параметр lpszEntry — запись справочника, индекс подзаписи из кото- рой определяет параметр dwSubEntry Параметр lpRasSubEntry — указатель на буфер, который будет получать структуру RASSUBENTRY, за ним следует спи- сок дополнительных телефонных номеров Структура RASSUBENTRYопреде- лена так
typedef struct tagRASSUBENTRY
{
DWORD dwSize,
DWORD dwfFlags,
TCHAR szDeviceType[RAS_MaxDeviceType + 1 ] ,
TCHAR szDeviceName[RAS_MaxDeviceName + 1 ] ;
TCHAR szLocalPhoneNumber[RAS_MaxPhoneNumber + 1];
DWORD dwAlternateOffset;
} RASSUBENTRY;
Поля этой структуры можно описать следующим образом
dwSize — размер (в байтах) структуры RASSUBENTRY,
Ш dwFlags — не используется,
szDeviceType — строка, представляющая тип устройства, используемого для соединения,
szDeviceName действительное имя TAPI-устройства,
Ш szLocalPhoneNumber телефонный номер для использования этим устройством,
dwAlternateOffset — количество байт от начала структуры до списка последовательных разделенных нулями строк, которые следуют за струк- турой

5 3 0 ЧАСТЬ III Служба удаленного доступа (RAS)
Буфер ipRasSubEntry должен быть достаточно большим, чтобы вместить структуру RASSUBENTRY и дополнительные телефонные номера Иначе Ras-
GetSubEntryPropertws вернет ошибку ERROR_BUFFER_TOO_SMALL Параметру
Ipdwcb нужно присвоить количество байт в буфере IpRasSubEntry При выпол- нении Ipdwcb будет присвоено общее количество байт, необходимых для хранения структуры и дополнительных номеров Параметры ipbDeviceConfig
и ipcbDeviceConfig не используются и должны быть равны NULL
Вы можете создать новую или модифицировать существующую подза- пись определенной записи телефонного справочника с помощью функции
RasSetSubEntryProperties
DWORD RasSetSubEntryProperties(
LPCTSTR lpszPhonebook, '"
LPCTSTR lpszEntry,
DWORD dwSubEntry,
LPRASSUBENTRY IpRasSubEntry,
DWORD dwcbRasSubEntry,
LPBYTE IpbDeviceConfig,
DWORD dwcbDeviceConfig
),
Параметры ее такие же, как и у RasGetSubEntryProperties, за исключением
IpRasSubEntry, который определяет подзапись для добавления в телефонный справочник
Управление соединением
Получить свойства соединения, установленного в вашей системе, позволя- ют следующие RAS-функции RasEnumConnections, RasGetSubEntryHandle и
RasGetProjectionlnfo Функция RasEnumConnections перечисляет все активные
RAS-соединения
DWORD RasEnumConnections(
LPRASCONN lprasconn, ,
vV(
LPDWORD lpcb, '
s
*
LPDWORD lpcConneotions
),
Параметр lprasconn — это буфер приложения, который будет получат*
массив структур RASCONN % <Ш
typedef struct .RASCONN г Ч
< к
DWORD dwSize, _j
HRASCONN hrasconn,
TCHAR szEntryName[RAS_MaxEntryName + 1]; > M >
#if (WINVER >= 0x400)
CHAR szDeviceType[RAS_MaxDeviceType + 1 ] , vv
CHAR szDeviceName[RAS_KaxDeviceNan\e + 1],
flendif
#if (WINVER >= 0x401)

ГЛАВА 16 Клиент службы RAS 531
CHAR szPhonebook[MAX_PATH],
DWORD dwSubEntry,
#endif
#lf (WINVER >= 0x500)
GUID guidEntry,
#endif
} RASCONN,
Эти поля определяются следующим образом
dwSize размер (в байтах) структуры RASCONN,
Ш brasconn — созданный функцией RasDial описатель соединения,
Ш szEntryName запись телефонного справочника, используемая для ус- тановления соединения, если была задействована пустая строка, то поле получит строку с точкой (), а за ней — используемый телефонный номер,
Ш szDeviceType — строка описывает тип устройства, используемого при соединении,
Ш szDeviceName — строка с именем устройства, с помощью которого ус- танавливалось соединение,
Ш szPbonebook — полный путь к телефонному справочнику для записи, по которой устанавливалось соединение,
Ш dwSubEntry — индекс подзаписи записи телефонного справочника,
guidEntry — в Windows 2000 получает GUID для записи телефонного справочника, используемой для установления соединения
Необходимо передать в RasEnumConnections достаточно большой буфер для хранения нескольких структур RASCONN, иначе функция даст сбой с ошибкой ERROR_BUFFER_TOO_SMALL Следовательно, первая структура RAS-
CONN в буфере должна иметь поле dwSize со значением размера структуры
RASCONN в байтах Следующий параметр — Ipcb, указатель на переменную,
которой необходимо присвоить размер (в байтах) массива Iprasconn В нем будет содержаться число байт, требуемых для перечисления всех соедине- ний при выполнении функции Если размер буфера окажется мал, вы всегда можете попытаться повторить эту операцию с увеличенным размером буфе- ра, возвращенном в Ipcb Параметр ipcConnections — указатель на перемен- ную, которая получает число записанных в Iprasconn структур RASCONN
Функция RasGetSubEntryHandle позволяет получать описатель для конк- ретной подзаписи многоканального соединения '
DWORD RasGetSubEntryHandle(
HRASCONN hrasconn, "*''
DWORD dwSubEntry,
LPHRASCONN lphrasconn
),
Параметр hrasconn — описатель RAS-соединения для многоканального соединения, a dwSubEntry — индекс подзаписи устройства в этом соедине- нии Параметр lphrasconn получает описатель соединения для устройства подзаписи

5 3 2 ЧАСТЬ III Служба удаленного доступа (RAS)
Описатели соединения, получаемые от RasEnumConnections и RasGetSub-
EntryHandle, предоставляют информацию о сетевом протоколе, используе- мом в соединении. Такая информация называется проекционной. Сервер уда- ленного доступа использует ее для представления удаленного клиента в сети.
Например, при установлении RAS-соединения, использующего протокол IP
над кадрирующим протоколом, информация о конфигурации IP (такая, как назначенный IP-адрес) определяется с помощью службы RAS клиента. Вы мо- жете вывести проекционную информацию для протоколов, которые пере- даются через кадрирующий протокол РРР при вызове функции RasGetPro-
jectionlnfo:
DWORD RasGetProjectionInfo( gg
HRASCONN hrasconn,
RASPROJECTION rasp rejection,
LPVOID lpprojection,
LPDWORD lpcb •
);
Параметр hrasconn — описатель соединения RAS. Параметр rasprojection
перечислимый тип RASPROJECTION, позволяющий определять, для какого протокола получать информацию. Параметр lpprojection получает структу- ру данных, которая ассоциируется с перечислимым типом, указанном в
rasprojection. Последний параметр — lpcb, указатель на переменную, которой необходимо присвоить размер структуры lpprojection. После выполнения функции эта переменная будет содержать размер буфера для получения про- екционной информации.
Получать информацию о соединении позволяют следующие перечисли- мые типы RASPROJECTION: RASP_Amb, RASP_PppNbf, RASP_PppIpx и RASPPppIp.
Если вы укажете перечислимый тип RASP_Amb, то получите структуру RASAMB-.
typedef struct _RASAMB
{
DWORD dwSize;
DWORD dwError;
TCHAR szNetBiosError[NETBIOS_NAME_LEN + 1];
BYTE bLana;
> RASAMB;
Поля определены следующим образом:
Ш dwSize размер (в байтах) структуры RASAMB;
1 W T
1   ...   39   40   41   42   43   44   45   46   ...   50


написать администратору сайта