本文整理汇总了C++中SetConsoleCtrlHandler函数的典型用法代码示例。如果您正苦于以下问题:C++ SetConsoleCtrlHandler函数的具体用法?C++ SetConsoleCtrlHandler怎么用?C++ SetConsoleCtrlHandler使用的例子?那么, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了SetConsoleCtrlHandler函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: initSignalHandler
static void initSignalHandler()
{
SetConsoleCtrlHandler(winSignalHandler, TRUE);
}
示例2: main
int main(int argc, char *argv[]) {
int i, rc;
MDBX_env *env = NULL;
MDBX_txn *txn = NULL;
MDBX_cursor *mc = NULL;
MDBX_dbi dbi;
char *envname = NULL;
int envflags = MDBX_UTTERLY_NOSYNC, putflags = 0;
int append = 0;
MDBX_val prevk;
prog = argv[0];
if (argc < 2)
usage();
/* -a: append records in input order
* -f: load file instead of stdin
* -n: use NOSUBDIR flag on env_open
* -s: load into named subDB
* -N: use NOOVERWRITE on puts
* -T: read plaintext
* -V: print version and exit
*/
while ((i = getopt(argc, argv, "af:ns:NTV")) != EOF) {
switch (i) {
case 'V':
printf("%s (%s, build %s)\n", mdbx_version.git.describe,
mdbx_version.git.datetime, mdbx_build.datetime);
exit(EXIT_SUCCESS);
break;
case 'a':
append = 1;
break;
case 'f':
if (freopen(optarg, "r", stdin) == NULL) {
fprintf(stderr, "%s: %s: reopen: %s\n", prog, optarg,
mdbx_strerror(errno));
exit(EXIT_FAILURE);
}
break;
case 'n':
envflags |= MDBX_NOSUBDIR;
break;
case 's':
subname = mdbx_strdup(optarg);
break;
case 'N':
putflags = MDBX_NOOVERWRITE | MDBX_NODUPDATA;
break;
case 'T':
mode |= NOHDR | PRINT;
break;
default:
usage();
}
}
if (optind != argc - 1)
usage();
#if defined(_WIN32) || defined(_WIN64)
SetConsoleCtrlHandler(ConsoleBreakHandlerRoutine, true);
#else
#ifdef SIGPIPE
signal(SIGPIPE, signal_handler);
#endif
#ifdef SIGHUP
signal(SIGHUP, signal_handler);
#endif
signal(SIGINT, signal_handler);
signal(SIGTERM, signal_handler);
#endif /* !WINDOWS */
dbuf.iov_len = 4096;
dbuf.iov_base = mdbx_malloc(dbuf.iov_len);
/* read first header for mapsize= */
if (!(mode & NOHDR))
readhdr();
envname = argv[optind];
rc = mdbx_env_create(&env);
if (rc) {
fprintf(stderr, "mdbx_env_create failed, error %d %s\n", rc,
mdbx_strerror(rc));
return EXIT_FAILURE;
}
mdbx_env_set_maxdbs(env, 2);
if (envinfo.mi_maxreaders)
mdbx_env_set_maxreaders(env, envinfo.mi_maxreaders);
if (envinfo.mi_mapsize) {
if (envinfo.mi_mapsize > SIZE_MAX) {
fprintf(stderr, "mdbx_env_set_mapsize failed, error %d %s\n", rc,
mdbx_strerror(MDBX_TOO_LARGE));
return EXIT_FAILURE;
}
mdbx_env_set_mapsize(env, (size_t)envinfo.mi_mapsize);
//.........这里部分代码省略.........
示例3: cregtools_signal_attach
/* Attaches a signal handler for Ctrl+C or Ctrl+Break signals
* Returns 1 if successful or -1 on error
*/
int cregtools_signal_attach(
void (*signal_handler)( cregtools_signal_t ),
libcerror_error_t **error )
{
static char *function = "cregtools_signal_attach";
if( signal_handler == NULL )
{
libcerror_error_set(
error,
LIBCERROR_ERROR_DOMAIN_ARGUMENTS,
LIBCERROR_ARGUMENT_ERROR_INVALID_VALUE,
"%s: invalid signal handler.",
function );
return( -1 );
}
cregtools_signal_signal_handler = signal_handler;
if( SetConsoleCtrlHandler(
cregtools_signal_handler,
TRUE ) == 0 )
{
libcerror_error_set(
error,
LIBCERROR_ERROR_DOMAIN_RUNTIME,
LIBCERROR_RUNTIME_ERROR_SET_FAILED,
"%s: unable to attach signal handler.",
function );
return( -1 );
}
if( SetConsoleCtrlHandler(
NULL,
FALSE ) == 0 )
{
libcerror_error_set(
error,
LIBCERROR_ERROR_DOMAIN_RUNTIME,
LIBCERROR_RUNTIME_ERROR_SET_FAILED,
"%s: unable to attach break signal.",
function );
return( -1 );
}
#if defined( _MSC_VER )
cregtools_signal_initialize_memory_debug();
#endif
SetErrorMode(
SEM_FAILCRITICALERRORS );
#if defined( LOCALE_SUPPORT )
/* Allow subsequent threads to have their own locale.
* If the application is single threaded this call has
* no practical effect.
*/
_configthreadlocale(
_ENABLE_PER_THREAD_LOCALE );
/* Set the current thread locale to the user default
* ANSI code page.
*/
setlocale(
LC_ALL,
"" );
/* Set the the code page used by multibyte functions
* to use the same code page as the previous call to setlocale.
*/
_setmbcp(
_MB_CP_LOCALE );
#endif /* defined( LOCALE_SUPPORT ) */
return( 1 );
}
示例4: r_line_new
R_API RCons *r_cons_new() {
I.refcnt++;
if (I.refcnt != 1) {
return &I;
}
I.line = r_line_new ();
I.highlight = NULL;
I.event_interrupt = NULL;
I.is_wine = -1;
I.fps = 0;
I.use_color = false;
I.blankline = true;
I.teefile = NULL;
I.fix_columns = 0;
I.fix_rows = 0;
I.mouse_event = 0;
I.force_rows = 0;
I.force_columns = 0;
I.event_resize = NULL;
I.data = NULL;
I.event_data = NULL;
I.is_interactive = true;
I.noflush = false;
I.linesleep = 0;
I.fdin = stdin;
I.fdout = 1;
I.breaked = false;
//I.lines = 0;
I.buffer = NULL;
I.buffer_sz = 0;
I.buffer_len = 0;
r_cons_get_size (&I.pagesize);
I.num = NULL;
I.null = 0;
#if __WINDOWS__ && !__CYGWIN__
I.ansicon = r_sys_getenv ("ANSICON");
#endif
#if EMSCRIPTEN
/* do nothing here :? */
#elif __UNIX__ || __CYGWIN__
tcgetattr (0, &I.term_buf);
memcpy (&I.term_raw, &I.term_buf, sizeof (I.term_raw));
I.term_raw.c_iflag &= ~(BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL|IXON);
I.term_raw.c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);
I.term_raw.c_cflag &= ~(CSIZE|PARENB);
I.term_raw.c_cflag |= CS8;
I.term_raw.c_cc[VMIN] = 1; // Solaris stuff hehe
signal (SIGWINCH, resize);
#elif __WINDOWS__
h = GetStdHandle (STD_INPUT_HANDLE);
GetConsoleMode (h, (PDWORD) &I.term_buf);
I.term_raw = 0;
if (!SetConsoleCtrlHandler ((PHANDLER_ROUTINE)__w32_control, TRUE)) {
eprintf ("r_cons: Cannot set control console handler\n");
}
#endif
I.pager = NULL; /* no pager by default */
I.truecolor = 0;
I.mouse = 0;
I.cons_stack = r_stack_newf (6, cons_stack_free);
I.break_stack = r_stack_newf (6, break_stack_free);
r_cons_pal_null ();
r_cons_pal_init (NULL);
r_cons_rgb_init ();
r_cons_reset ();
return &I;
}
示例5: set_signal_blocking
void set_signal_blocking(int sig, int block)
{
SetConsoleCtrlHandler(blocking_handler, block ? TRUE : FALSE);
}
示例6: daemonize
int
daemonize(int port, int bg)
{
int sock = 0;
struct sockaddr_in serv;
int on = 1;
int fdtty;
pid_t pid;
if (bg) {
pid = fork();
if (pid < 0) {
perror("Daemon fork");
return (-1);
}
if (pid > 0)
exit(0);
}
daemon_port = port;
setsid();
#ifdef cygwin
SetConsoleCtrlHandler(handler_routine, TRUE);
#endif
signal(SIGTERM, &sig_term);
signal(SIGQUIT, &sig_quit);
signal(SIGINT, &sig_int);
signal(SIGHUP, SIG_IGN);
signal(SIGUSR1, &sig_usr1);
signal(SIGUSR2, &sig_usr2);
signal(SIGCHLD, SIG_IGN);
signal(SIGPIPE, SIG_IGN);
/* open an tty as standard I/O for vpcs */
fdtty_pid = forkpty(&fdtty, NULL, NULL, NULL);
if (fdtty_pid < 0) {
perror("Daemon fork tty\n");
return (-1);
}
/* child process, the 'real' vpcs */
if (fdtty_pid == 0)
return 0;
/* daemon socket */
sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sock < 0) {
perror("Daemon socket");
goto err;
}
(void) setsockopt(sock, SOL_SOCKET, SO_REUSEADDR,
(char *)&on, sizeof(on));
bzero((char *) &serv, sizeof(serv));
serv.sin_family = AF_INET;
serv.sin_addr.s_addr = htonl(INADDR_ANY);
serv.sin_port = htons(port);
if (bind(sock, (struct sockaddr *) &serv, sizeof(serv)) < 0) {
perror("Daemon bind port");
goto err;
}
if (listen(sock, 5) < 0) {
perror("Daemon listen");
goto err;
}
daemon_proc(sock, fdtty);
err:
if (sock >= 0)
close(sock);
close(fdtty);
kill(fdtty_pid, 9);
exit(-1);
}
示例7: init_ctrlc
void init_ctrlc(void)
{
int_detected = 0;
SetConsoleCtrlHandler( handle_ctrlc, TRUE );
}
示例8: LsapAdtInitialize
//.........这里部分代码省略.........
goto AuditInitError;
}
RtlCopyMemory(
&LsapAdtEventsInformation,
&AuditEventsInfo,
sizeof(LSARM_POLICY_AUDIT_EVENTS_INFO)
);
LsapAdtInitializeDriveLetters();
//
// Initialize privilege values we need
//
ChangeNotifyPrivilege = RtlConvertLongToLuid( SE_CHANGE_NOTIFY_PRIVILEGE );
AuditPrivilege = RtlConvertLongToLuid( SE_AUDIT_PRIVILEGE );
CreateTokenPrivilege = RtlConvertLongToLuid( SE_CREATE_TOKEN_PRIVILEGE );
AssignPrimaryTokenPrivilege = RtlConvertLongToLuid( SE_ASSIGNPRIMARYTOKEN_PRIVILEGE );
BackupPrivilege = RtlConvertLongToLuid( SE_BACKUP_PRIVILEGE );
RestorePrivilege = RtlConvertLongToLuid( SE_RESTORE_PRIVILEGE );
DebugPrivilege = RtlConvertLongToLuid( SE_DEBUG_PRIVILEGE );
//
// Tell base/wincon how to shut us down.
// First, tell base to shut us down as late in the game as possible.
//
SetProcessShutdownParameters(LSAP_SHUTDOWN_LEVEL, SHUTDOWN_NORETRY);
// And, tell them what function to call when we are being shutdown:
SetConsoleCtrlHandler(LsapShutdownNotification, TRUE);
} else if (Pass == 2) {
//
// Write out any Audit Records that were cached during the
// first stage of initialization. The Audit Log will be opened
// on the first write if necessary.
//
//
// BUGBUG - ScottBi 8/6/92 - This action cannot be taken here
// unless we know that the EventLog service is running. For now,
// an attempt is made to open the log each time an Audit Record
// is generated, and the cache grows until a limit is reached,
// at which point auditing is turned off and subsequent records
// are discarded.
//
/*
Status = LsapAdtWriteLog( NULL, (ULONG) 0);
if (!NT_SUCCESS(Status)) {
goto AuditInitError;
}
*/
}
AuditInitFinish:
if (AcquiredLock) {
示例9: PyInit__multiprocess
PyMODINIT_FUNC
PyInit__multiprocess(void)
{
PyObject *module, *temp, *value;
/* Initialize module */
module = PyModule_Create(&multiprocessing_module);
if (!module)
return NULL;
/* Get copy of objects from pickle */
temp = PyImport_ImportModule("dill");
if (!temp)
temp = PyImport_ImportModule(PICKLE_MODULE);
if (!temp)
return NULL;
pickle_dumps = PyObject_GetAttrString(temp, "dumps");
pickle_loads = PyObject_GetAttrString(temp, "loads");
pickle_protocol = PyObject_GetAttrString(temp, "DEFAULT_PROTOCOL");
if (!pickle_protocol)
pickle_protocol = PyObject_GetAttrString(temp, "HIGHEST_PROTOCOL");
Py_XDECREF(temp);
/* Get copy of BufferTooShort */
temp = PyImport_ImportModule("multiprocess");
if (!temp)
return NULL;
BufferTooShort = PyObject_GetAttrString(temp, "BufferTooShort");
Py_XDECREF(temp);
/* Add connection type to module */
if (PyType_Ready(&ConnectionType) < 0)
return NULL;
Py_INCREF(&ConnectionType);
PyModule_AddObject(module, "Connection", (PyObject*)&ConnectionType);
#if defined(MS_WINDOWS) || \
(defined(HAVE_SEM_OPEN) && !defined(POSIX_SEMAPHORES_NOT_ENABLED))
/* Add SemLock type to module */
if (PyType_Ready(&SemLockType) < 0)
return NULL;
Py_INCREF(&SemLockType);
{
PyObject *py_sem_value_max;
/* Some systems define SEM_VALUE_MAX as an unsigned value that
* causes it to be negative when used as an int (NetBSD). */
if ((int)(SEM_VALUE_MAX) < 0)
py_sem_value_max = PyLong_FromLong(INT_MAX);
else
py_sem_value_max = PyLong_FromLong(SEM_VALUE_MAX);
if (py_sem_value_max == NULL)
return NULL;
PyDict_SetItemString(SemLockType.tp_dict, "SEM_VALUE_MAX",
py_sem_value_max);
}
PyModule_AddObject(module, "SemLock", (PyObject*)&SemLockType);
#endif
#ifdef MS_WINDOWS
/* Add PipeConnection to module */
if (PyType_Ready(&PipeConnectionType) < 0)
return NULL;
Py_INCREF(&PipeConnectionType);
PyModule_AddObject(module, "PipeConnection",
(PyObject*)&PipeConnectionType);
/* Initialize win32 class and add to multiprocessing */
temp = create_win32_namespace();
if (!temp)
return NULL;
PyModule_AddObject(module, "win32", temp);
/* Initialize the event handle used to signal Ctrl-C */
sigint_event = CreateEvent(NULL, TRUE, FALSE, NULL);
if (!sigint_event) {
PyErr_SetFromWindowsErr(0);
return NULL;
}
if (!SetConsoleCtrlHandler(ProcessingCtrlHandler, TRUE)) {
PyErr_SetFromWindowsErr(0);
return NULL;
}
#endif
/* Add configuration macros */
temp = PyDict_New();
if (!temp)
return NULL;
#define ADD_FLAG(name) \
value = Py_BuildValue("i", name); \
if (value == NULL) { Py_DECREF(temp); return NULL; } \
if (PyDict_SetItemString(temp, #name, value) < 0) { \
Py_DECREF(temp); Py_DECREF(value); return NULL; } \
Py_DECREF(value)
#if defined(HAVE_SEM_OPEN) && !defined(POSIX_SEMAPHORES_NOT_ENABLED)
ADD_FLAG(HAVE_SEM_OPEN);
#endif
#ifdef HAVE_SEM_TIMEDWAIT
//.........这里部分代码省略.........
示例10: enable_exit_signaller
void enable_exit_signaller()
{
SetConsoleCtrlHandler( control_handler, TRUE );
}
示例11: adb_server_main
int adb_server_main(int is_daemon, int server_port, int ack_reply_fd) {
#if defined(_WIN32)
// adb start-server starts us up with stdout and stderr hooked up to
// anonymous pipes. When the C Runtime sees this, it makes stderr and
// stdout buffered, but to improve the chance that error output is seen,
// unbuffer stdout and stderr just like if we were run at the console.
// This also keeps stderr unbuffered when it is redirected to adb.log.
if (is_daemon) {
if (setvbuf(stdout, NULL, _IONBF, 0) == -1) {
fatal("cannot make stdout unbuffered: %s", strerror(errno));
}
if (setvbuf(stderr, NULL, _IONBF, 0) == -1) {
fatal("cannot make stderr unbuffered: %s", strerror(errno));
}
}
SetConsoleCtrlHandler(ctrlc_handler, TRUE);
#endif
init_transport_registration();
usb_init();
local_init(DEFAULT_ADB_LOCAL_TRANSPORT_PORT);
adb_auth_init();
std::string error;
std::string local_name = android::base::StringPrintf("tcp:%d", server_port);
if (install_listener(local_name, "*smartsocket*", nullptr, 0, &error)) {
fatal("could not install *smartsocket* listener: %s", error.c_str());
}
// Inform our parent that we are up and running.
if (is_daemon) {
close_stdin();
setup_daemon_logging();
// Any error output written to stderr now goes to adb.log. We could
// keep around a copy of the stderr fd and use that to write any errors
// encountered by the following code, but that is probably overkill.
#if defined(_WIN32)
const HANDLE ack_reply_handle = cast_int_to_handle(ack_reply_fd);
const CHAR ack[] = "OK\n";
const DWORD bytes_to_write = arraysize(ack) - 1;
DWORD written = 0;
if (!WriteFile(ack_reply_handle, ack, bytes_to_write, &written, NULL)) {
fatal("adb: cannot write ACK to handle 0x%p: %s", ack_reply_handle,
SystemErrorCodeToString(GetLastError()).c_str());
}
if (written != bytes_to_write) {
fatal("adb: cannot write %lu bytes of ACK: only wrote %lu bytes",
bytes_to_write, written);
}
CloseHandle(ack_reply_handle);
#else
// TODO(danalbert): Can't use SendOkay because we're sending "OK\n", not
// "OKAY".
if (!android::base::WriteStringToFd("OK\n", ack_reply_fd)) {
fatal_errno("error writing ACK to fd %d", ack_reply_fd);
}
unix_close(ack_reply_fd);
#endif
}
D("Event loop starting");
fdevent_loop();
return 0;
}
示例12: add_connection
static int add_connection(struct service *service, struct command_context *cmd_ctx)
{
socklen_t address_size;
struct connection *c, **p;
int retval;
int flag = 1;
c = malloc(sizeof(struct connection));
c->fd = -1;
c->fd_out = -1;
memset(&c->sin, 0, sizeof(c->sin));
c->cmd_ctx = copy_command_context(cmd_ctx);
c->service = service;
c->input_pending = 0;
c->priv = NULL;
c->next = NULL;
if (service->type == CONNECTION_TCP) {
address_size = sizeof(c->sin);
c->fd = accept(service->fd, (struct sockaddr *)&service->sin, &address_size);
c->fd_out = c->fd;
/* This increases performance dramatically for e.g. GDB load which
* does not have a sliding window protocol.
*
* Ignore errors from this fn as it probably just means less performance
*/
setsockopt(c->fd, /* socket affected */
IPPROTO_TCP, /* set option at TCP level */
TCP_NODELAY, /* name of option */
(char *)&flag, /* the cast is historical cruft */
sizeof(int)); /* length of option value */
LOG_INFO("accepting '%s' connection from %s", service->name, service->port);
retval = service->new_connection(c);
if (retval != ERROR_OK) {
close_socket(c->fd);
LOG_ERROR("attempted '%s' connection rejected", service->name);
command_done(c->cmd_ctx);
free(c);
return retval;
}
} else if (service->type == CONNECTION_STDINOUT) {
c->fd = service->fd;
c->fd_out = fileno(stdout);
#ifdef _WIN32
/* we are using stdin/out so ignore ctrl-c under windoze */
SetConsoleCtrlHandler(NULL, TRUE);
#endif
/* do not check for new connections again on stdin */
service->fd = -1;
LOG_INFO("accepting '%s' connection from pipe", service->name);
retval = service->new_connection(c);
if (retval != ERROR_OK) {
LOG_ERROR("attempted '%s' connection rejected", service->name);
command_done(c->cmd_ctx);
free(c);
return retval;
}
} else if (service->type == CONNECTION_PIPE) {
c->fd = service->fd;
/* do not check for new connections again on stdin */
service->fd = -1;
char *out_file = alloc_printf("%so", service->port);
c->fd_out = open(out_file, O_WRONLY);
free(out_file);
if (c->fd_out == -1) {
LOG_ERROR("could not open %s", service->port);
exit(1);
}
LOG_INFO("accepting '%s' connection from pipe %s", service->name, service->port);
retval = service->new_connection(c);
if (retval != ERROR_OK) {
LOG_ERROR("attempted '%s' connection rejected", service->name);
command_done(c->cmd_ctx);
free(c);
return retval;
}
}
/* add to the end of linked list */
for (p = &service->connections; *p; p = &(*p)->next)
;
*p = c;
service->max_connections--;
return ERROR_OK;
}
示例13: main
/* main entry point function */
int __cdecl main( int argc, char **argv )
{
/* local variables */
BOOL ret = PASS;
/* PAL initialization */
if( (PAL_Initialize(argc, argv)) != 0 )
{
return( FAIL );
}
/* set the console control handler function */
if( ! SetConsoleCtrlHandler( CtrlHandler1, TRUE ) )
{
ret = FAIL;
Trace( "ERROR:%lu:SetConsoleCtrlHandler() failed to add "
"CtrlHandler1\n",
GetLastError() );
Fail( "Test failed\n" );
}
/* test that the right control handler functions are set */
if( ! GenerateConsoleCtrlEvent( CTRL_C_EVENT, 0 ) )
{
Trace( "ERROR:%lu:GenerateConsoleCtrlEvent() failed\n",
GetLastError() );
ret = FAIL;
goto done;
}
/* give the handlers a chance to execute */
Sleep( 2000 );
/* check the results */
if( g_bFlag2 )
{
Trace( "ERROR:CtrlHandler2() was inexplicably called\n" );
ret = FAIL;
goto done;
}
if( ! g_bFlag1 )
{
Trace( "ERROR:CtrlHandler1() was not called but should have been\n" );
ret = FAIL;
goto done;
}
/* reset our flags */
g_bFlag1 = FALSE;
/* try to unset CtrlHandler2, which isn't set in the first place */
if( SetConsoleCtrlHandler( CtrlHandler2, FALSE ) )
{
ret = FAIL;
Trace( "ERROR:SetConsoleCtrlHandler() succeeded trying to "
"remove CtrlHandler2, which isn't set\n" );
goto done;
}
/* make sure that the existing control handler functions are still set */
if( ! GenerateConsoleCtrlEvent( CTRL_C_EVENT, 0 ) )
{
Trace( "ERROR:%lu:GenerateConsoleCtrlEvent() failed\n",
GetLastError() );
ret = FAIL;
goto done;
}
/* give the handlers a chance to execute */
Sleep( 2000 );
/* check the results */
if( g_bFlag2 )
{
Trace( "ERROR:CtrlHandler2() was inexplicably called\n" );
ret = FAIL;
goto done;
}
if( ! g_bFlag1 )
{
Trace( "ERROR:CtrlHandler1() was not called but should have been\n" );
ret = FAIL;
goto done;
}
done:
/* unset any handlers that were set */
if( ! SetConsoleCtrlHandler( CtrlHandler1, FALSE ) )
{
ret = FAIL;
//.........这里部分代码省略.........
示例14: smpd_parse_command_args
//.........这里部分代码省略.........
{
char filename[SMPD_MAX_FILENAME];
smpd_spn_list_hnd_t hnd;
result = smpd_spn_list_init(&hnd);
if(result != SMPD_SUCCESS){
printf("Unable to initialize SPN list\n");
ExitProcess((UINT ) -1);
}
if(smpd_get_opt_string(argcp, argvp, "-f", filename, SMPD_MAX_FILENAME)){
result = smpd_remove_scps_with_file(filename, hnd);
if(result != SMPD_SUCCESS){
printf("Failed to remove smpd's Service Principal Names (at least one failed) with Domain Controller\n");
ExitProcess((UINT )-1);
}
printf("Removed smpd's Service Principal Names successfully\n");
}
else{
result = smpd_remove_scp(NULL, hnd);
if(result != SMPD_SUCCESS){
printf("Failed to remove smpd's Service Principal Name with Domain Controller\n");
ExitProcess((UINT )-1);
}
printf("Removed smpd's Service Principal Name successfully\n");
}
smpd_spn_list_finalize(&hnd);
ExitProcess(0);
}
if (smpd_get_opt(argcp, argvp, "-mgr"))
{
/* Set a ctrl-handler to kill child processes if this smpd is killed */
if (!SetConsoleCtrlHandler(smpd_ctrl_handler, TRUE))
{
result = GetLastError();
smpd_dbg_printf("unable to set the ctrl handler for the smpd manager, error %d.\n", result);
}
#ifdef HAVE_WINDOWS_H
{
BOOL ret;
ret = smpd_init_affinity_table();
if(!ret){
smpd_dbg_printf("Initializing smpd affinity table failed\n");
}
}
#endif
smpd_process.bService = SMPD_FALSE;
if (!smpd_get_opt_string(argcp, argvp, "-read", read_handle_str, 20))
{
smpd_err_printf("manager started without a read pipe handle.\n");
smpd_exit_fn(FCNAME);
return SMPD_FAIL;
}
if (!smpd_get_opt_string(argcp, argvp, "-write", write_handle_str, 20))
{
smpd_err_printf("manager started without a write pipe handle.\n");
smpd_exit_fn(FCNAME);
return SMPD_FAIL;
}
hRead = smpd_decode_handle(read_handle_str);
hWrite = smpd_decode_handle(write_handle_str);
smpd_dbg_printf("manager creating listener and session sets.\n");
示例15: cevents_init
static void cevents_init()
{
if (SetConsoleCtrlHandler(console_handler,TRUE)==FALSE)
ShowWarning ("Unable to install the console handler!\n");
}