Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2006.07.09;
Скачать: [xml.tar.bz2];

Вниз

Проблема с RasEnumConnections   Найти похожие ветки 

 
Lik   (2006-03-30 18:44) [0]

Имеем сервис:

type
 HRasConn = DWORD;
 PRasConn = ^TRasConn;            
 TRasConn = record
   dwSize: DWORD;
   rasConn: HRasConn;
   szEntryName: Array[0..256] Of Char;
   szDeviceType: Array[0..16] Of Char;
   szDeviceName: Array [0..128] Of char;
 end;

var
 RasEnumConnections:
       Function (RASConn: PrasConn; var BufSize: DWord; var Connections: DWord ): DWORD; stdcall;

procedure ServiceCtrlHandler(Opcode : Cardinal);stdcall;
begin
 case Opcode of
   SERVICE_CONTROL_STOP:ServiceStatus.dwCurrentState := SERVICE_STOPPED;
   SERVICE_CONTROL_INTERROGATE :SetServiceStatus (ServiceStatusHandle, ServiceStatus)
 end;
 SetServiceStatus (ServiceStatusHandle, ServiceStatus)
end;

Procedure ServiceProc(dwArgc: DWORD;lpszArgv: Pointer); StdCall;
var
 RConn:array[0..10] of TRasConn;
 a,f:DWord;
 Err:integer;
 l:THandle;
begin
 ServiceStatusHandle:=RegisterServiceCtrlHandler(ServiceName,@ServiceCtrlHandler) ;
 if ServiceStatusHandle=0 then exit;
 ServiceStatus.dwServiceType      := SERVICE_WIN32;
 ServiceStatus.dwControlsAccepted := SERVICE_ACCEPT_STOP;
 ServiceStatus.dwWin32ExitCode           := 0;
 ServiceStatus.dwServiceSpecificExitCode := 0;
 ServiceStatus.dwCheckPoint              := 0;
 ServiceStatus.dwWaitHint                := 0;
 ServiceStatus.dwCurrentState :=SERVICE_RUNNING;
 SetServiceStatus(ServiceStatusHandle,ServiceStatus);

 l:=LoadLibrary("RASAPI32.DLL");
 RasEnumConnections := GetProcAddress(l, "RasEnumConnectionsA");

 a:=SizeOF(RConn);
 f:=0;
 RConn[0].dwSize:=sizeof(TRasConn);
 Err:=RasEnumConnections(@RConn[0],a,f);

 ServiceStatus.dwCurrentState :=SERVICE_Stopped;
 ServiceStatus.dwWin32ExitCode           := 0;
 ServiceStatus.dwServiceSpecificExitCode := 0;
 ServiceStatus.dwCheckPoint              := 0;
 ServiceStatus.dwWaitHint                := 0;
 SetServiceStatus (ServiceStatusHandle,ServiceStatus);
end;

var
 DispatchTable : array [0..1] of TServiceTableEntryA;
begin
   DispatchTable[0].lpServiceName:=ServiceName;
   DispatchTable[0].lpServiceProc:=@ServiceProc;
   DispatchTable[1].lpServiceName:=nil;
   DispatchTable[1].lpServiceProc:=nil;
   StartServiceCtrlDispatcher(DispatchTable[0]);
end.

Здесь RasEnumConnections возвращает чудесное число "-2147467259" . Хотя в обычном exe-шнике функция выдаёт то, что от неё и требуется. Где тут косяк?


 
Сергей М. ©   (2006-03-31 09:10) [1]

Используй RasGetErrorString() для получения текстового описания RAS-ошибки с указанным кодом.


 
Lik   (2006-03-31 15:39) [2]

если тип Err:int64 то функция возвращает число 2147500037 (80004005h). Ошибки с таким кодом не значится.
Пробовал использовать данный код (с RasEnumConnections) в Делфовском сервисе (File > New >  Service Application), функция так же работает исправно. Может что-то инициализировать ещё нужно?... Прошу подсказок, мастера!


 
fellix   (2006-03-31 16:07) [3]

Ответ в Вашем же вопросе: "в Делфовском сервисе ... функция ... работает исправно".
Сравните реализацию сервисов у Вас и в Делфи.
Кстати, попробуйте установить SERVICE_START_PENDING. а уж потом SERVICE_RUNNING.
----------------
P.S. $80004005 - это Active Directory Service Interfaces error.
80004005 == Unspecified error. The cause of the COM object failure is indeterminate by ADSI.


 
Сергей М. ©   (2006-03-31 16:40) [4]


> если тип Err:int64


С какого перепугу Int64-то ?


 
Lik   (2006-03-31 16:44) [5]


> С какого перепугу Int64-то ?

ну или Cardinal, число на выходе то же.



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2006.07.09;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.009 c
15-1149843053
Kolan
2006-06-09 12:50
2006.07.09
Что такое программная оболочка?


2-1150444896
redlord
2006-06-16 12:01
2006.07.09
label и его handel


2-1150554983
WebSqlNeederr
2006-06-17 18:36
2006.07.09
Как разделить строку (логины) по разделителю запятая?


3-1147331804
dest81
2006-05-11 11:16
2006.07.09
доступ к сереверу через интернет


2-1150176880
Rezya
2006-06-13 09:34
2006.07.09
DBGride





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский