Skip to content

Commit bae035d

Browse files
committed
The 'clink inject' command will always return success when being invoked via cmd.exe's autorun (fixes #373).
1 parent 792e9c6 commit bae035d

2 files changed

Lines changed: 12 additions & 7 deletions

File tree

clink/loader/autorun.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,7 @@ static int install_autorun(const char* clink_path, int wow64)
311311
}
312312
str_cat(new_value, "\"", i);
313313
str_cat(new_value, clink_path, i);
314-
str_cat(new_value, "\\clink\" inject", i);
314+
str_cat(new_value, "\\clink\" inject --autorun", i);
315315

316316
if (g_clink_args != NULL)
317317
{

clink/loader/inject.c

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -373,6 +373,8 @@ int inject(int argc, char** argv)
373373
{
374374
DWORD target_pid = 0;
375375
int i;
376+
int ret = 1;
377+
int is_autorun = 0;
376378
shared_mem_t* shared_mem;
377379
inject_args_t inject_args = { 0 };
378380

@@ -384,6 +386,7 @@ int inject(int argc, char** argv)
384386
{ "nohostcheck", no_argument, NULL, 'n' },
385387
{ "ansi", no_argument, NULL, 'a' },
386388
{ "nolog", no_argument, NULL, 'l' },
389+
{ "autorun", no_argument, NULL, '_' },
387390
{ "help", no_argument, NULL, 'h' },
388391
{ NULL, 0, NULL, 0 }
389392
};
@@ -426,20 +429,21 @@ int inject(int argc, char** argv)
426429
case 'a': inject_args.ansi_mode = 1; break;
427430
case 'q': inject_args.quiet = 1; break;
428431
case 'd': target_pid = atoi(optarg); break;
432+
case '_': is_autorun = 1; break;
429433

430434
case 'l':
431435
inject_args.no_log = 1;
432436
disable_log();
433437
break;
434438

435439
case '?':
436-
return 1;
440+
goto end;
437441

438442
case 'h':
439443
default:
440444
puts(g_clink_header);
441445
puts_help(help, sizeof_array(help));
442-
return 1;
446+
goto end;
443447
}
444448
}
445449

@@ -451,23 +455,24 @@ int inject(int argc, char** argv)
451455
if (target_pid == -1)
452456
{
453457
LOG_ERROR("Failed to find parent process ID.");
454-
return 1;
458+
goto end;
455459
}
456460
}
457461

458462
// Check to see if clink is already installed.
459463
if (is_clink_present(target_pid))
460464
{
461-
return 1;
465+
goto end;
462466
}
463467

464468
// Write args to shared memory, inject, and clean up.
465469
shared_mem = create_shared_mem(1, "clink", target_pid);
466470
memcpy(shared_mem->ptr, &inject_args, sizeof(inject_args));
467-
i = !do_inject(target_pid);
471+
ret = !do_inject(target_pid);
468472
close_shared_mem(shared_mem);
469473

470-
return i;
474+
end:
475+
return is_autorun ? 0 : ret;
471476
}
472477

473478
// vim: expandtab

0 commit comments

Comments
 (0)