Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.09;
Скачать: CL | DM;

Вниз

Проблема с 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 вся ветка

Текущий архив: 2006.07.09;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.031 c
15-1150035209
Любопытствующий
2006-06-11 18:13
2006.07.09
Денежные переводы: почтовый vs электронный


2-1150462041
novill
2006-06-16 16:47
2006.07.09
Как послать сообщение другой (чужой) программе?


3-1147352502
wirg
2006-05-11 17:01
2006.07.09
Filter


2-1150487677
Float
2006-06-16 23:54
2006.07.09
Включение компа


15-1149845185
Некто
2006-06-09 13:26
2006.07.09
Отпуск!