社本@元ネオニート Blog

社本@元ネオニート (元々ワック) のいたずら書き (for Programmers)

AILight Banner
AILight Blog

プロフィール

社本@元ネオニート Blog
働いたら負けかなと思っていたのですが。。とうとう働き始めました。アメリカのシアトル・エリアにある企業向けのバックアップソフトを開発している会社です。日本人は私だけ。なんとか。。やっていけてるようです。

目次

Blog 利用状況

記事分類

過去の記事

タグ

再起動マネージャー (Restart Manager) API のラッパ関数 - Windows Vista

Windows Vistaの再起動マネージャー (Restart Manager) API を、
動的に呼び出すラッパ関数です。

---
 static DWORD Probe_RmStartSession(DWORD* pSessionHandle, DWORD dwSessionFlags, WCHAR strSessionKey[CCH_RM_SESSION_KEY+1])
 {
  CModule module;

  HINSTANCE hInst = module.LoadLibrary(_T("RstrtMgr.dll"));
  if (hInst == NULL)
  {
   return ERROR_CALL_NOT_IMPLEMENTED; 
  }

  typedef DWORD (WINAPI *FUNC_RMSTARTSESSION) (DWORD* pSessionHandle, DWORD dwSessionFlags, WCHAR strSessionKey[CCH_RM_SESSION_KEY+1]);
  CString strFuncName = _T("RmStartSession");
  FUNC_RMSTARTSESSION func = (FUNC_RMSTARTSESSION)module.GetProcAddress(strFuncName);
  if (func == NULL)
  {
   return ERROR_CALL_NOT_IMPLEMENTED; 
  }

  return (*func)(pSessionHandle, dwSessionFlags, strSessionKey);
 }
 static DWORD Probe_RmEndSession(DWORD dwSessionHandle)
 {
  CModule module;

  HINSTANCE hInst = module.LoadLibrary(_T("RstrtMgr.dll"));
  if (hInst == NULL)
  {
   return ERROR_CALL_NOT_IMPLEMENTED; 
  }

  typedef DWORD (WINAPI *FUNC_RMENDSESSION) (DWORD dwSessionHandle);
  CString strFuncName = _T("RmEndSession");
  FUNC_RMENDSESSION func = (FUNC_RMENDSESSION)module.GetProcAddress(strFuncName);
  if (func == NULL)
  {
   return ERROR_CALL_NOT_IMPLEMENTED; 
  }

  return (*func)(dwSessionHandle);
 }
 static DWORD Probe_RmAddFilter(DWORD dwSessionHandle, LPCWSTR strFilename, RM_UNIQUE_PROCESS* Application, LPCWSTR strShortServiceName, RM_FILTER_ACTION ActionType)
 {
  CModule module;

  HINSTANCE hInst = module.LoadLibrary(_T("RstrtMgr.dll"));
  if (hInst == NULL)
  {
   return ERROR_CALL_NOT_IMPLEMENTED; 
  }

  typedef DWORD (WINAPI *FUNC_RMADDFILTER) (DWORD, LPCWSTR, RM_UNIQUE_PROCESS*, LPCWSTR, RM_FILTER_ACTION);
  CString strFuncName = _T("RmAddFilter");
  FUNC_RMADDFILTER func = (FUNC_RMADDFILTER)module.GetProcAddress(strFuncName);
  if (func == NULL)
  {
   return ERROR_CALL_NOT_IMPLEMENTED; 
  }

  return (*func)(dwSessionHandle, strFilename, Application, strShortServiceName, ActionType);
 }
 static DWORD Probe_RmJoinSession(DWORD* pSessionHandle, const WCHAR strSessionKey[CCH_RM_SESSION_KEY+1])
 {
  CModule module;

  HINSTANCE hInst = module.LoadLibrary(_T("RstrtMgr.dll"));
  if (hInst == NULL)
  {
   return ERROR_CALL_NOT_IMPLEMENTED; 
  }

  typedef DWORD (WINAPI *FUNC_RMJOINSESSION) (DWORD* pSessionHandle, const WCHAR strSessionKey[CCH_RM_SESSION_KEY+1]);
  CString strFuncName = _T("RmJoinSession");
  FUNC_RMJOINSESSION func = (FUNC_RMJOINSESSION)module.GetProcAddress(strFuncName);
  if (func == NULL)
  {
   return ERROR_CALL_NOT_IMPLEMENTED; 
  }

  return (*func)(pSessionHandle, strSessionKey);
 }
 static DWORD Probe_RmGetList(DWORD dwSessionHandle, UINT* pnProcInfoNeeded, UINT* pnProcInfo, RM_PROCESS_INFO rgAffectedApps[ ], LPDWORD lpdwRebootReasons)
 {
  CModule module;

  HINSTANCE hInst = module.LoadLibrary(_T("RstrtMgr.dll"));
  if (hInst == NULL)
  {
   return ERROR_CALL_NOT_IMPLEMENTED; 
  }

  typedef DWORD (WINAPI *FUNC_RMGETLIST) (DWORD dwSessionHandle, UINT* pnProcInfoNeeded, UINT* pnProcInfo, RM_PROCESS_INFO rgAffectedApps[ ], LPDWORD lpdwRebootReasons);
  CString strFuncName = _T("RmGetList");
  FUNC_RMGETLIST func = (FUNC_RMGETLIST)module.GetProcAddress(strFuncName);
  if (func == NULL)
  {
   return ERROR_CALL_NOT_IMPLEMENTED; 
  }

  return (*func)(dwSessionHandle, pnProcInfoNeeded, pnProcInfo,rgAffectedApps, lpdwRebootReasons);
 }
 static DWORD Probe_RmGetFilterList(DWORD dwSessionHandle, PBYTE pbFilterBuf, DWORD cbFilterBuf, LPDWORD cbFilterBufNeeded)
 {
  CModule module;

  HINSTANCE hInst = module.LoadLibrary(_T("RstrtMgr.dll"));
  if (hInst == NULL)
  {
   return ERROR_CALL_NOT_IMPLEMENTED; 
  }

  typedef DWORD (WINAPI *FUNC_RMGETFILTERLIST) (DWORD dwSessionHandle, PBYTE pbFilterBuf, DWORD cbFilterBuf, LPDWORD cbFilterBufNeeded);
  CString strFuncName = _T("RmGetFilterList");
  FUNC_RMGETFILTERLIST func = (FUNC_RMGETFILTERLIST)module.GetProcAddress(strFuncName);
  if (func == NULL)
  {
   return ERROR_CALL_NOT_IMPLEMENTED; 
  }

  return (*func)(dwSessionHandle, pbFilterBuf, cbFilterBuf, cbFilterBufNeeded);
 }
 static DWORD Probe_RmCancelCurrentTask(DWORD dwSessionHandle)
 {
  CModule module;

  HINSTANCE hInst = module.LoadLibrary(_T("RstrtMgr.dll"));
  if (hInst == NULL)
  {
   return ERROR_CALL_NOT_IMPLEMENTED; 
  }

  typedef DWORD (WINAPI *FUNC_RMCANCELCURRENTTASK) (DWORD);
  CString strFuncName = _T("RmCancelCurrentTask");
  FUNC_RMCANCELCURRENTTASK func = (FUNC_RMCANCELCURRENTTASK)module.GetProcAddress(strFuncName);
  if (func == NULL)
  {
   return ERROR_CALL_NOT_IMPLEMENTED; 
  }

  return (*func)(dwSessionHandle);
 }
 static DWORD Probe_RmRemoveFilter(DWORD dwSessionHandle,LPCWSTR strFilename, RM_UNIQUE_PROCESS* Application,LPCWSTR strShortServiceName)
 {
  CModule module;

  HINSTANCE hInst = module.LoadLibrary(_T("RstrtMgr.dll"));
  if (hInst == NULL)
  {
   return ERROR_CALL_NOT_IMPLEMENTED; 
  }

  typedef DWORD (WINAPI *FUNC_RMREMOVEFILTER) (DWORD dwSessionHandle,LPCWSTR strFilename, RM_UNIQUE_PROCESS* Application,LPCWSTR strShortServiceName);
  CString strFuncName = _T("RmRemoveFilter");
  FUNC_RMREMOVEFILTER func = (FUNC_RMREMOVEFILTER)module.GetProcAddress(strFuncName);
  if (func == NULL)
  {
   return ERROR_CALL_NOT_IMPLEMENTED; 
  }

  return (*func)(dwSessionHandle, strFilename, Application, strShortServiceName);
 }
 static DWORD Probe_RmRegisterResources(DWORD dwSessionHandle, UINT nFiles, LPCWSTR rgsFilenames[], UINT nApplications, RM_UNIQUE_PROCESS rgApplications[], UINT nServices, LPCWSTR rgsServiceNames[])
 {
  CModule module;

  HINSTANCE hInst = module.LoadLibrary(_T("RstrtMgr.dll"));
  if (hInst == NULL)
  {
   return ERROR_CALL_NOT_IMPLEMENTED; 
  }

  typedef DWORD (WINAPI *FUNC_RMREGISTERRESOURCES) (DWORD dwSessionHandle, UINT nFiles, LPCWSTR rgsFilenames[], UINT nApplications, RM_UNIQUE_PROCESS rgApplications[], UINT nServices, LPCWSTR rgsServiceNames[]);
  CString strFuncName = _T("RmRegisterResources");
  FUNC_RMREGISTERRESOURCES func = (FUNC_RMREGISTERRESOURCES)module.GetProcAddress(strFuncName);
  if (func == NULL)
  {
   return ERROR_CALL_NOT_IMPLEMENTED; 
  }

  return (*func)(dwSessionHandle, nFiles, rgsFilenames, nApplications, rgApplications, nServices, rgsServiceNames);
 }
 static DWORD Probe_RmRestart(DWORD dwSessionHandle, DWORD dwRestartFlags, RM_WRITE_STATUS_CALLBACK fnStatus)
 {
  CModule module;

  HINSTANCE hInst = module.LoadLibrary(_T("RstrtMgr.dll"));
  if (hInst == NULL)
  {
   return ERROR_CALL_NOT_IMPLEMENTED; 
  }

  typedef DWORD (WINAPI *FUNC_RMRESTART) (DWORD dwSessionHandle, DWORD dwRestartFlags, RM_WRITE_STATUS_CALLBACK fnStatus);
  CString strFuncName = _T("RmRestart");
  FUNC_RMRESTART func = (FUNC_RMRESTART)module.GetProcAddress(strFuncName);
  if (func == NULL)
  {
   return ERROR_CALL_NOT_IMPLEMENTED; 
  }

  return (*func)(dwSessionHandle, dwRestartFlags, fnStatus);
 }
 static DWORD Probe_RmShutdown(DWORD dwSessionHandle, ULONG lActionFlags, RM_WRITE_STATUS_CALLBACK fnStatus)
 {
  CModule module;

  HINSTANCE hInst = module.LoadLibrary(_T("RstrtMgr.dll"));
  if (hInst == NULL)
  {
   return ERROR_CALL_NOT_IMPLEMENTED; 
  }

  typedef DWORD (WINAPI *FUNC_RMSHUTDOWN) (DWORD dwSessionHandle, ULONG lActionFlags, RM_WRITE_STATUS_CALLBACK fnStatus);
  CString strFuncName = _T("RmShutdown");
  FUNC_RMSHUTDOWN func = (FUNC_RMSHUTDOWN)module.GetProcAddress(strFuncName);
  if (func == NULL)
  {
   return ERROR_CALL_NOT_IMPLEMENTED; 
  }

  return (*func)(dwSessionHandle, lActionFlags, fnStatus);
 }
---

■Restart Manager - MSDN
http://msdn2.microsoft.com/en-us/library/aa373654.aspx

■DLLを扱うクラス (CModule) - for Programmers
http://www.wac-jp.com/programmers/win32/Module.html

投稿日時 : 2007年2月16日 14:34


コメントを追加

#  re: 再起動マネージャー (Restart Manager) API のラッパ関数 - Windows Vista 2007年2月16日 14:57 とっちゃん

キタ━━━━━━(゚∀゚)━━━━━━ !!!!!
って、関数だw

#うちは当分消極的対応になりそうw

#  re: 再起動マネージャー (Restart Manager) API のラッパ関数 - Windows Vista 2007年2月16日 16:13 社本@ワック

> って、関数だw

ちょっと、VC8以前の環境でも使う必要があったので、まずは動的に呼び出す関数を整備しました。。

#  再起動マネージャー (Restart Manager) API のクラス - Windows Vista 2007年2月22日 11:05 社本@ワック Blog

再起動マネージャー (Restart Manager) API のクラス - Windows Vista
タイトル
名前
URL
コメント