HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
1129
名無しさん稼働中のサービスの情報を取得する方法3解決


名無しさん

リンク

2008/11/29(Sat) 17:23:30|NO.21130

HSPで稼働しているWindowsサービスの情報を取得するプログラムを作っています。
EnumServicesStatusEx APIを使ってどうにかするのは分かっているのですが、
EnumServicesStatusExに渡す変数にmref命令でどのリソースを割り当てればいいのか分かりません。

どなたかご教授願えないでしょうか。
サンプルなどもあれば助かります。



この記事に返信する


hspail

リンク

2008/11/29(Sat) 18:41:11|NO.21133

その質問内容だと何がしたいのかよくわかりませんが、
とりあえず途中まで書いてみたので参考にしてみてください。


#uselib "advapi32.dll" #cfunc OpenSCManager "OpenSCManagerA" int, int, int #func CloseServiceHandle "CloseServiceHandle" int #cfunc EnumServicesStatusEx "EnumServicesStatusExA" int, int, int, int, int, int, int, int, int, int #define SC_MANAGER_ENUMERATE_SERVICE 4 #define SC_ENUM_PROCESS_INFO 0 #define SERVICE_WIN32_OWN_PROCESS 16 #define SERVICE_WIN32_SHARE_PROCESS 32 #define SERVICE_WIN32 (SERVICE_WIN32_OWN_PROCESS|SERVICE_WIN32_SHARE_PROCESS) #define SERVICE_ACTIVE 1 #define PROCESS_VM_READ $10 #define PROCESS_QUERY_INFORMATION $400 // Service Control Managerのデータベースを開く hSCM = OpenSCManager(0, 0,SC_MANAGER_ENUMERATE_SERVICE) if hSCM == 0 : end // エラー sdim buf, 1000, 1000 // bufにステータス情報が入る needed = 0 returned = 0 resumeHandle = 0 if EnumServicesStatusEx(hSCM,SC_ENUM_PROCESS_INFO,SERVICE_WIN32,SERVICE_ACTIVE,varptr(buf),1000*1000,varptr(needed),varptr(returned),varptr(resumeHandle), 0) : end // 閉じる CloseServiceHandle hSCM



New Monkey

リンク

2008/11/29(Sat) 19:18:07|NO.21137

作ってみましたがよくわからん・・・
参考:
http://www.dev.pei.jp/programming/sdk/sdk69.html

#uselib "advapi32.dll" #func OpenSCManager "OpenSCManagerA" sptr, sptr, sptr #func EnumServicesStatusEx "EnumServicesStatusExA" sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr #func CloseServiceHandle "CloseServiceHandle" sptr #uselib "kernel32.dll" #func OpenProcess "OpenProcess" sptr, sptr, sptr #func CloseHandle "CloseHandle" sptr #uselib "psapi.dll" #func EnumProcessModules "EnumProcessModules" sptr, sptr, sptr, sptr #func GetModuleBaseName "GetModuleBaseNameA" sptr, sptr, sptr, sptr #define SC_MANAGER_ENUMERATE_SERVICE $00000004 #define SC_ENUM_PROCESS_INFO $00000000 #define SERVICE_WIN32 $00000030 #define SERVICE_ACTIVE $00000001 #define SERVICE_STATE_ALL $00000003 #define PROCESS_QUERY_INFORMATION $00000400 #define PROCESS_VM_READ $00000010 dim enumServiceStatus, 9, 1024 needed = 0 returned = 0 resumeHandle = 0 dim module, 1024 sdim name, 1024 buf = "" : notesel buf OpenSCManager 0, 0, SC_MANAGER_ENUMERATE_SERVICE : scmHandle = stat if scmHandle=0 { dialog "failed OpenSCManager" : end } EnumServicesStatusEx scmHandle, SC_ENUM_PROCESS_INFO, SERVICE_WIN32, SERVICE_ACTIVE, varptr(enumServiceStatus), 4*9*1024, varptr(needed), varptr(returned), varptr(resumeHandle), 0 if stat=0 { dialog "failed EnumServiceStatusEx" : end } repeat returned OpenProcess PROCESS_QUERY_INFORMATION|PROCESS_VM_READ, 0, enumServiceStatus(7, cnt) : handle = stat if handle!=0 { EnumProcessModules handle, varptr(module), 4*1024, varptr(needed) if stat { GetModuleBaseName handle, module, varptr(name), 1024 if stat>0 { noteadd name } } CloseHandle handle } loop CloseServiceHandle scmHandle mes buf



名無しさん

リンク

2008/12/7(Sun) 18:21:37|NO.21373

返信ありがとうございます。
サンプルのおかげで何とかなりそうです。
つたない説明にも関わらず丁寧に対応してくださって本当にありがとうございました。



ONION software Copyright 1997-2023(c) All rights reserved.