forked from Dniel97/segatools
platform/pcbid.c: Use pcbid_config
This commit is contained in:
parent
8774b83f9c
commit
65ccaf55f3
@ -1,18 +1,19 @@
|
|||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "hook/table.h"
|
#include "hook/table.h"
|
||||||
|
|
||||||
|
#include "platform/pcbid.h"
|
||||||
|
|
||||||
#include "util/dprintf.h"
|
#include "util/dprintf.h"
|
||||||
|
|
||||||
static BOOL WINAPI pcbid_GetComputerNameA(char *dest, uint32_t *len);
|
static BOOL WINAPI pcbid_GetComputerNameA(char *dest, uint32_t *len);
|
||||||
|
|
||||||
static const char pcbid_file[] = "DEVICE/pcbid.txt";
|
static struct pcbid_config pcbid_cfg;
|
||||||
static char pcbid_str[16];
|
|
||||||
|
|
||||||
static const struct hook_symbol pcbid_syms[] = {
|
static const struct hook_symbol pcbid_syms[] = {
|
||||||
{
|
{
|
||||||
@ -21,42 +22,38 @@ static const struct hook_symbol pcbid_syms[] = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
void pcbid_hook_init(void)
|
void pcbid_hook_init(const struct pcbid_config *cfg)
|
||||||
{
|
{
|
||||||
FILE *f;
|
assert(cfg != NULL);
|
||||||
|
|
||||||
f = fopen(pcbid_file, "r");
|
if (!cfg->enable) {
|
||||||
|
return;
|
||||||
if (f != NULL) {
|
|
||||||
/* De-hyphenate the serial number. Game code will re-insert it. */
|
|
||||||
fscanf(f, "%4s-", &pcbid_str[0]);
|
|
||||||
fscanf(f, "%11s", &pcbid_str[4]);
|
|
||||||
fclose(f);
|
|
||||||
} else {
|
|
||||||
dprintf("Failed to open %s\n", pcbid_file);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
memcpy(&pcbid_cfg, cfg, sizeof(*cfg));
|
||||||
hook_table_apply(NULL, "kernel32.dll", pcbid_syms, _countof(pcbid_syms));
|
hook_table_apply(NULL, "kernel32.dll", pcbid_syms, _countof(pcbid_syms));
|
||||||
}
|
}
|
||||||
|
|
||||||
static BOOL WINAPI pcbid_GetComputerNameA(char *dest, uint32_t *len)
|
static BOOL WINAPI pcbid_GetComputerNameA(char *dest, uint32_t *len)
|
||||||
{
|
{
|
||||||
|
size_t required;
|
||||||
|
|
||||||
if (dest == NULL || len == NULL) {
|
if (dest == NULL || len == NULL) {
|
||||||
SetLastError(ERROR_INVALID_PARAMETER);
|
SetLastError(ERROR_INVALID_PARAMETER);
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (*len < sizeof(pcbid_str)) {
|
wcstombs_s(&required, NULL, 0, pcbid_cfg.serial_no, 0);
|
||||||
|
|
||||||
|
if (required > *len) {
|
||||||
SetLastError(ERROR_INSUFFICIENT_BUFFER);
|
SetLastError(ERROR_INSUFFICIENT_BUFFER);
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
dprintf("Pcbid: Get PCB serial\n");
|
dprintf("Pcbid: Get PCB serial\n");
|
||||||
|
wcstombs_s(NULL, dest, *len, pcbid_cfg.serial_no, *len - 1);
|
||||||
memcpy(dest, pcbid_str, sizeof(pcbid_str));
|
|
||||||
*len = sizeof(pcbid_str) - 1;
|
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
void pcbid_hook_init(void);
|
#include "platform/config.h"
|
||||||
|
|
||||||
|
void pcbid_hook_init(const struct pcbid_config *cfg);
|
||||||
|
Loading…
Reference in New Issue
Block a user