Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Тип запуска службы [D7, NT4, Win2k, WinXP]


Дмитрий Ботвин ©   (2004-08-13 19:14:00) 

Люди, подскажите в чём ошибка. Есть функция, получающая
структуру типа:

  _QUERY_SERVICE_CONFIGA = record
   dwServiceType: DWORD;
   dwStartType: DWORD;
   dwErrorControl: DWORD;
   lpBinaryPathName: PAnsiChar;
   lpLoadOrderGroup: PAnsiChar;
   dwTagId: DWORD;
   lpDependencies: PAnsiChar;
   lpServiceStartName: PAnsiChar;
   lpDisplayName: PAnsiChar;
 end;

из неё я хочу узнать тип запуска службы. При вызове функции
QueryServiceConfig выдается ошибка. Вот кусок кода:

function GetServiceConfig(ServiceName: String): DWORD;
  var
    SCManager, Service: SC_HANDLE;
    BytesNeeded: DWORD;
    buf: PQueryServiceConfig;
  begin
    buf:=nil;
    TypeStart:=0;
    SCManager := OpenSCManager(PChar(Form1.CompName.Text), nil, GENERIC_READ);
    if SCManager <> 0 then
    try
      Service := OpenService(SCManager, PChar(ServiceName), SERVICE_QUERY_CONFIG);
      if Service <> 0 then
        try
          begin
            QueryServiceConfig(Service, buf, 4096, BytesNeeded);
            if buf<>nil then
              begin
                Result:=buf^.dwStartType;
              end;
          end;
        finally
          CloseServiceHandle(Service);
        end;
      else Result:=0;
     finally
        CloseServiceHandle(SCManager);
     end
    else Result:=0;
  end;


Дмитрий Ботвин   (2004-08-14 09:19:00) [1]

Спасибо, VMcL!!! Тупанул немного, забыл про выделение памяти.


VMcL   (2004-08-14 01:52:00) [2]

Память Пушкин будет выделять?

1. Вызываешь QueryServiceConfig(Service, nil, 0, BytesNeeded);Таким образом узнаешь, скока функция хочет памяти.
2. GetMem(buf, BytesNeeded);или buf := AllocMem(BytesNeeded);
3. Потом QueryServiceConfig(Service, buf, BytesNeeded, BytesNeeded);
4. FreeMem(buf);


Наверх

Титульная страница Поиск, карта сайта Написать письмо