سلام دوستان
میخوام یه سرویس رو به صورت Dll ران کنم با استفاده از svchost
کسی نمونه ای مثالی ؟ سرنخی برای سرچ کردن کردن ؟
نگید dll service یا ازین جور چیزا چون یه هفتس خودم دارم اینجور چیزارو سرچ میزنم
این dll ها باید کرنل مد نوشته شند ؟
خواهشا اگه مثالی چیزی دارید یا مقاله ای که کامل و واضح باشه دریغ نکنید
----
در ضمن بگم که من مشکلی تو نوشتن سرویس ندارم و این کاررو با Exe انجام دادم قبلا
پیشاپیش ممنون
شما یک نمونه از این dll service ها بزار اینجا تا معلوم بشه چطور نسب میشه
ممنون دوست عزیز از پاسختون
مثلا یه نمونه wuaueng.dll هستش تو شاخه ی system32 که سرویس auto update ویندوز هستش
فقط جناب lord_viper تمام تلاشتون رو کنید تا امشب نتیجه ی تحقیقاتتون رو بمن برسونید :) ممنون میشم
جایی رو نت نمیگه این dll یک سرویس هست بلکه گفته میشه windows update این dll رو لود میکنه یعنی از توابع اون استفاده میکنه
موفق باشید
همین که پیگیر شدی و سرچ زدی ممنون عزیز از وقتت
اما اگه یه سری به رجیستری بزنیم ، اونجا معلوم میشه که به صورت سرویس اجرا میشه و با svchost
بازم دمت گرم
در ضمن با Dependency walker هم بازش کنیم یکی از تایع هاش servicemain هستش
موفق و موید باشید
این یک نمونه کد البته به c++
کد:
__declspec(dllexport) VOID WINAPI ServiceMain(DWORD dwArgc, LPTSTR *lpszArgv);
__declspec(dllexport) DWORD WINAPI HandlerEx(DWORD dwControl, DWORD dwEventType, LPVOID lpEventData, LPVOID lpContext);
SERVICE_STATUS_HANDLE hServiceStatusHandle;
SERVICE_STATUS ServiceStatus;
const int nBufferSize = 500;
CHAR pServiceName[nBufferSize+1];
CRITICAL_SECTION myCS;
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
VOID WINAPI ServiceMain(DWORD dwArgc, LPTSTR *lpszArgv)
{
strcpy(pServiceName,"NativeService");
DWORD status = 0;
DWORD specificError = 0xfffffff;
ServiceStatus.dwServiceType = SERVICE_WIN32_SHARE_PROCESS;
ServiceStatus.dwCurrentState = SERVICE_START_PENDING;
ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN | SERVICE_ACCEPT_PAUSE_CONTINUE;
ServiceStatus.dwWin32ExitCode = 0;
ServiceStatus.dwServiceSpecificExitCode = 0;
ServiceStatus.dwCheckPoint = 0;
ServiceStatus.dwWaitHint = 0;
hServiceStatusHandle = RegisterServiceCtrlHandlerExA(pServiceName, HandlerEx, NULL);
if (hServiceStatusHandle==0)
{
return;
}
ServiceStatus.dwCurrentState = SERVICE_RUNNING;
ServiceStatus.dwCheckPoint = 0;
ServiceStatus.dwWaitHint = 0;
SetServiceStatus(hServiceStatusHandle, &ServiceStatus);
}
DWORD WINAPI HandlerEx(
DWORD dwControl,
DWORD dwEventType,
LPVOID lpEventData,
LPVOID lpContext
)
{
switch(dwControl)
{
case SERVICE_CONTROL_STOP:
case SERVICE_CONTROL_SHUTDOWN:
ServiceStatus.dwWin32ExitCode = 0;
ServiceStatus.dwCurrentState = SERVICE_STOPPED;
ServiceStatus.dwCheckPoint = 0;
ServiceStatus.dwWaitHint = 0;
break;
case SERVICE_CONTROL_PAUSE:
ServiceStatus.dwCurrentState = SERVICE_PAUSED;
break;
case SERVICE_CONTROL_CONTINUE:
ServiceStatus.dwCurrentState = SERVICE_RUNNING;
break;
case SERVICE_CONTROL_INTERROGATE:
break;
default:
break;
};
SetServiceStatus(hServiceStatusHandle, &ServiceStatus);
return NO_ERROR;
}
و برای نصب اون هم در لینک زیر توضیحاتی داده شده
کد:
http://en.wikipedia.org/wiki/Svchost
حالا شما چرا میخواین به سروریس اون هم به صورت dll داشته باشین؟
سلام داداش دمت گرم :) تمام مشکلات من فک کنم از همین یک خط بود :دی
نمیدونم چرا به مغز نداشته ی خودم تاحالا خطور نکرده بود :))
فعلا این ارور برطرف شده به ی ارور دیگه برخوردم :دی
کد:
__declspec(dllexport) VOID WINAPI ServiceMain(DWORD dwArgc, LPTSTR *lpszArgv);
میشه گفت یه پروژه ی آموزشی ه که دارم بخاطر یادگیری کار با سرویس ها پیش میبرمش :) کار با exeها تموم شده بود باید با dllهاش ه به پایان میرسوندم :دی
بازم ممنون ، من برم اون یکی ارور رو ببینم میتونم حل کنم یا باید باز مزاحمت شم ، بازم مرسی