#pragma once
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0501
#else
#if _WIN32_WINNT < 0x0501
#undef _WIN32_WINNT
#define _WIN32_WINNT 0x0501
#endif
#endif
#include <windows.h>
#include <npapi.h>
#define SECURITY_WIN32
#include <security.h>
#include <ntsecapi.h>
#include <tchar.h>
#include <strsafe.h>
typedef int errcode_t;
#include <loadfuncs-lsa.h>
#include <krb5.h>
#include <loadfuncs-com_err.h>
#include <loadfuncs-krb5.h>
#include <loadfuncs-profile.h>
#include <loadfuncs-leash.h>
#define SERVICE_DLL "advapi32.dll"
typedef SC_HANDLE (WINAPI *FP_OpenSCManagerA)(char *, char *, DWORD);
typedef SC_HANDLE (WINAPI *FP_OpenServiceA)(SC_HANDLE, char *, DWORD);
typedef BOOL (WINAPI *FP_QueryServiceStatus)(SC_HANDLE, LPSERVICE_STATUS);
typedef BOOL (WINAPI *FP_CloseServiceHandle)(SC_HANDLE);
typedef int cc_int32;
#define CC_API_VER_1 1
#define CC_API_VER_2 2
#define CCACHE_API cc_int32
#define CC_NOERROR 0
#define CC_BADNAME 1
#define CC_NOTFOUND 2
#define CC_END 3
#define CC_IO 4
#define CC_WRITE 5
#define CC_NOMEM 6
#define CC_FORMAT 7
#define CC_LOCKED 8
#define CC_BAD_API_VERSION 9
#define CC_NO_EXIST 10
#define CC_NOT_SUPP 11
#define CC_BAD_PARM 12
#define CC_ERR_CACHE_ATTACH 13
#define CC_ERR_CACHE_RELEASE 14
#define CC_ERR_CACHE_FULL 15
#define CC_ERR_CRED_VERSION 16
enum {
CC_CRED_VUNKNOWN = 0, CC_CRED_V4 = 1,
CC_CRED_V5 = 2,
CC_CRED_VMAX = 3 };
typedef struct opaque_dll_control_block_type* apiCB;
typedef struct _infoNC {
char* name;
char* principal;
cc_int32 vers;
} infoNC;
TYPEDEF_FUNC(
CCACHE_API,
CALLCONV_C,
cc_initialize,
(
apiCB** cc_ctx, cc_int32 api_version, cc_int32* api_supported, const char** vendor )
);
TYPEDEF_FUNC(
CCACHE_API,
CALLCONV_C,
cc_shutdown,
(
apiCB** cc_ctx )
);
TYPEDEF_FUNC(
CCACHE_API,
CALLCONV_C,
cc_get_NC_info,
(
apiCB* cc_ctx, struct _infoNC*** ppNCi )
);
TYPEDEF_FUNC(
CCACHE_API,
CALLCONV_C,
cc_free_NC_info,
(
apiCB* cc_ctx,
struct _infoNC*** ppNCi )
);
#define CCAPI_DLL "krbcc32.dll"
#define MAX_USERNAME_LENGTH 256
#define MAX_PASSWORD_LENGTH 256
#define MAX_DOMAIN_LENGTH 256
#define KFW_LOGON_EVENT_NAME TEXT("MIT Kerberos")
BOOLEAN APIENTRY DllEntryPoint(HANDLE dll, DWORD reason, PVOID reserved);
DWORD APIENTRY NPGetCaps(DWORD index);
DWORD APIENTRY NPLogonNotify(
PLUID lpLogonId,
LPCWSTR lpAuthentInfoType,
LPVOID lpAuthentInfo,
LPCWSTR lpPreviousAuthentInfoType,
LPVOID lpPreviousAuthentInfo,
LPWSTR lpStationName,
LPVOID StationHandle,
LPWSTR *lpLogonScript);
DWORD APIENTRY NPPasswordChangeNotify(
LPCWSTR lpAuthentInfoType,
LPVOID lpAuthentInfo,
LPCWSTR lpPreviousAuthentInfoType,
LPVOID lpPreviousAuthentInfo,
LPWSTR lpStationName,
LPVOID StationHandle,
DWORD dwChangeInfo);
#ifdef __cplusplus
extern "C" {
#endif
void UnloadFuncs(FUNC_INFO [], HINSTANCE);
int LoadFuncs(const char*, FUNC_INFO [], HINSTANCE*, int*, int, int, int);
void DebugEvent0(char *a);
void DebugEvent(char *b,...);
DWORD MapAuthError(DWORD code);
static BOOL WINAPI UnicodeStringToANSI(UNICODE_STRING uInputString, LPSTR lpszOutputString, int nOutStringLen);
int KFW_is_available(void);
int KFW_get_cred( char * username, char * password, int lifetime, char ** reasonP );
void KFW_copy_cache_to_system_file(const char * user, const char * filename);
int KFW_destroy_tickets_for_principal(char * user);
int KFW_set_ccache_dacl(char *filename, HANDLE hUserToken);
int KFW_set_ccache_dacl_with_user_sid(char *filename, PSID pUserSID);
int KFW_obtain_user_temp_directory(HANDLE hUserToken, char *newfilename, int size);
void KFW_cleanup_orphaned_caches(void);
void CALLBACK LogonEventHandlerA(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow);
#ifdef __cplusplus
}
#endif