Форум: "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