Программирование в сетях Windows. Э. Джонс, Д. Оланд
Скачать 2.88 Mb.
|
ГЛАВА 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 • |