Api: creare un servizio |
Carlo Spigoli |
13/09/2004 |
Difficoltà:
Medio
|
|
Ho
scritto
un
pezzo
di
programma
che
dovrebbe
installare
un
servizio
NT,
ma
non
funziona.
L'API
CreateService
mi
riporta
l'errore
ERROR_INVALID_PARAMETER.
Perchè?
Faccio
presente
che
altre
API,
sempre
per
la
gestione
dei
servizi,
mi
funzionano
correttamente.
L'esempio
che
segue,
per
evitare
qualsiasi
problema
legato
ad
un
servizio
scritto
da
me,
tenta
l'installazione
di
un
servizio
usando
un
eseguibile
che
già
esiste
in
Windows.
Per
evitare
risposte
"già
provate",
ho
provato
tutte
le
combinazioni
di
"\"
nel
nome
del
file,
Le
costanti
risultano
valorizzate
in
questo
modo:
SERVICE_ALL_ACCESS
=
0xf01ff
(983551)
SERVICE_WIN32_OWN_PROCESS
=
0x10
(16)
SERVICE_DEMAND_START
=
0x3
(3)
SERVICE_ERROR_NORMAL
=
0x1
(1)
Grazie
______________________________________________________
Option
Explicit
'API
Constants
Public
Const
SERVICES_ACTIVE_DATABASE
=
"ServicesActive"
'
Service
Control
Public
Const
SERVICE_CONTROL_STOP
=
&H1
Public
Const
SERVICE_CONTROL_PAUSE
=
&H2
'
Service
State
-
For
CurrentState
Public
Const
SERVICE_STOPPED
=
&H1
Public
Const
SERVICE_START_PENDING
=
&H2
Public
Const
SERVICE_STOP_PENDING
=
&H3
Public
Const
SERVICE_RUNNING
=
&H4
Public
Const
SERVICE_CONTINUE_PENDING
=
&H5
Public
Const
SERVICE_PAUSE_PENDING
=
&H6
Public
Const
SERVICE_PAUSED
=
&H7
'Service
Control
Manager
Object
specific
access
types
Public
Const
STANDARD_RIGHTS_REQUIRED
=
&HF0000
Public
Const
SC_MANAGER_CONNECT
=
&H1
Public
Const
SC_MANAGER_CREATE_SERVICE
=
&H2
Public
Const
SC_MANAGER_ENUMERATE_SERVICE
=
&H4
Public
Const
SC_MANAGER_LOCK
=
&H8
Public
Const
SC_MANAGER_QUERY_LOCK_STATUS
=
&H10
Public
Const
SC_MANAGER_MODIFY_BOOT_CONFIG
=
&H20
Public
Const
SC_MANAGER_ALL_ACCESS
=
_
(STANDARD_RIGHTS_REQUIRED
_
Or
SC_MANAGER_CONNECT
_
Or
SC_MANAGER_CREATE_SERVICE
_
Or
SC_MANAGER_ENUMERATE_SERVICE
_
Or
SC_MANAGER_LOCK
_
Or
SC_MANAGER_QUERY_LOCK_STATUS
_
Or
SC_MANAGER_MODIFY_BOOT_CONFIG)
'Service
Object
specific
access
types
Public
Const
SERVICE_QUERY_CONFIG
=
&H1
Public
Const
SERVICE_CHANGE_CONFIG
=
&H2
Public
Const
SERVICE_QUERY_STATUS
=
&H4
Public
Const
SERVICE_ENUMERATE_DEPENDENTS
=
&H8
Public
Const
SERVICE_START
=
&H10
Public
Const
SERVICE_STOP
=
&H20
Public
Const
SERVICE_PAUSE_CONTINUE
=
&H40
Public
Const
SERVICE_INTERROGATE
=
&H80
Public
Const
SERVICE_USER_DEFINED_CONTROL
=
&H100
Public
Const
SERVICE_ALL_ACCESS
=
_
(STANDARD_RIGHTS_REQUIRED
_
Or
SERVICE_QUERY_CONFIG
_
Or
SERVICE_CHANGE_CONFIG
_
Or
SERVICE_QUERY_STATUS
_
Or
SERVICE_ENUMERATE_DEPENDENTS
_
Or
SERVICE_START
_
Or
SERVICE_STOP
_
Or
SERVICE_PAUSE_CONTINUE
_
Or
SERVICE_INTERROGATE
_
Or
SERVICE_USER_DEFINED_CONTROL)
Type
SERVICE_STATUS
dwServiceType
As
Long
dwCurrentState
As
Long
dwControlsAccepted
As
Long
dwWin32ExitCode
As
Long
dwServiceSpecificExitCode
As
Long
dwCheckPoint
As
Long
dwWaitHint
As
Long
End
Type
Public
Const
ERROR_ACCESS_DENIED
=
&O5
Public
Const
ERROR_CIRCULAR_DEPENDENCY
=
1059&
Public
Const
ERROR_DATABASE_DOES_NOT_EXIST
=
1065&
Public
Const
ERROR_DUPLICATE_SERVICE_NAME
=
1078&
Public
Const
ERROR_INVALID_NAME
=
123&
Public
Const
ERROR_INVALID_PARAMETER
=
87&
Public
Const
ERROR_INVALID_SERVICE_ACCOUNT
=
1057&
Public
Const
ERROR_SERVICE_EXISTS
=
1073&
Public
Const
READ_CONTROL
=
&H20000
Public
Const
STANDARD_RIGHTS_ALL
=
&H1F0000
Public
Const
STANDARD_RIGHTS_EXECUTE
=
(READ_CONTROL)
Public
Const
STANDARD_RIGHTS_READ
=
(READ_CONTROL)
Public
Const
STANDARD_RIGHTS_WRITE
=
(READ_CONTROL)
Public
Const
SC_VSCROLL
=
&HF070&
Public
Const
SC_TASKLIST
=
&HF130&
Public
Const
SC_SIZE
=
&HF000&
Public
Const
SC_SCREENSAVE
=
&HF140&
Public
Const
SC_RESTORE
=
&HF120&
Public
Const
SC_PREVWINDOW
=
&HF050&
Public
Const
SC_NEXTWINDOW
=
&HF040&
Public
Const
SC_MOVE
=
&HF010&
Public
Const
SC_MINIMIZE
=
&HF020&
Public
Const
SC_MAXIMIZE
=
&HF030&
Public
Const
SC_ZOOM
=
SC_MAXIMIZE
Public
Const
SERVICE_WIN32_OWN_PROCESS
=
&H10&
Public
Const
SERVICE_DEMAND_START
=
&H3
Public
Const
SERVICE_ERROR_IGNORE
=
&H0
Public
Const
SERVICE_ERROR_NORMAL
=
&H1
Public
Const
SERVICE_ERROR_SEVERE
=
&H2
Public
Const
SERVICE_ERROR_CRITICAL
=
&H3
Public
Const
SERVICE_INTERACTIVE_PROCESS
=
&H100
Dim
hndl1,
hndl2
As
Long
Dim
Nomeserv
Dim
Nomeservlong
Dim
Nomeexe
Dim
Nullo
Dim
Gruppo
As
Long
Nullo
=
vbNullString
Nomeserv
=
"Servizio1"
Nomeservlong
=
"nomediService1"
Nomeexe
=
"%SystemRoot%\\System32\\cisvc.exe"
hndl1
=
OpenSCManager("127.0.0.1",
vbNullString,
hndl2
=
CreateService(
_
hndl1,
_
Nomeserv,
_
Nomeservlong,
_
SERVICE_ALL_ACCESS,
_
SERVICE_WIN32_OWN_PROCESS,
_
SERVICE_DEMAND_START,
_
SERVICE_ERROR_NORMAL,
_
Nomeexe,
_
Nullo,
_
kkk,
_
Nullo,
_
Nullo,
_
Nullo)
|