○GINA.DLLにて CTRL+ALT+DLL の抑制

▽GINA.DLLのWlxLoggedOnSASに WLX_SAS_TYPE_CTRL_ALT_DEL が来た時が
CTRL+ALT+DLLが押されたタイミングですので、
return WLX_SAS_ACTION_NONE;
にて無かったことにすれば実現できます。

▽常にCTRL+ALT+DLLを抑制すると、面倒なことになりそうなので
MutexオブジェクトがあるときにのみCTRL+ALT+DLL の抑制します。

@前の章に従い、カスタマイズGINA.DLLを作成してください。
A下のように書き換えます。

//ログオン中にSASイベントが発生すると呼び出される
int WINAPI WlxLoggedOnSAS(PVOID pWlxContext,DWORD dwSasType,PVOID pReserved){

	HANDLE hMutex;

	if(dwSasType == WLX_SAS_TYPE_CTRL_ALT_DEL) {
		hMutex = OpenMutex(MUTANT_QUERY_STATE, FALSE, "GINA");
		if(hMutex != NULL) {
			CloseHandle(hMutex);
			return WLX_SAS_ACTION_NONE;
		}
	}
 	return (* GWlxLoggedOnSAS)(pWlxContext, dwSasType, pReserved);
}


○上のDLLの制御(Mutexオブジェクトの生成)

▽VCの場合

HANDLE hMutex;
void CtestDlg::OnBnClickedButton1()
{
	hMutex = CreateMutex(0, 0, "GINA"); //Mutexオブジェクトを作成
}

void CtestDlg::OnBnClickedButton2()
{
	CloseHandle(hMutex); //Mutexオブジェクトを破棄
}


▽VB.netの場合

    Dim m As New System.Threading.Mutex()
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        m = New System.Threading.Mutex(False, "GINA")
    End Sub
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        m.Close()
    End Sub


▽VB6の場合

Private Declare Function CreateMutex Lib "kernel32" Alias "CreateMutexA" ( _
    ByVal pSecurity As Long, ByVal fInitialOwner As Long, ByVal MutexName As String) As Long

Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

Private hMutex As Long

Private Sub Command1_Click()
    hMutex = CreateMutex(0, 0, "GINA") 'Mutexオブジェクトを作成
End Sub

Private Sub Command2_Click()
    CloseHandle hMutex 'Mutexオブジェクトを破棄
End Sub



▲トップページ > Windows と C++