Martin Karer http://sezz.at Martin Karer Thu, 23 Jul 2015 15:12:46 +0000 de-DE hourly 1 http://wordpress.org/?v=4.0.18 HOWTO: Stop Acronis Backup from rebooting Windows PE http://sezz.at/blog/windows/howto-stop-acronis-backup-rebooting-windows-pe/ http://sezz.at/blog/windows/howto-stop-acronis-backup-rebooting-windows-pe/#comments Thu, 23 Jul 2015 14:19:45 +0000 http://sezz.at/?p=2438 Running Acronis Backup in Windows PE is pretty easy nowadays thanks to the included support for Windows PE, but there’s one major drawback: Closing Acronis Backup automatically reboots Windows PE. While this propably won’t bug you when your Windows PE image doesn’t contain anything else it really sucks when you use it as a universal recovery/repair OS. I don’t unterstand why Acronis even added this “feature”, they could have just added WPEINIT and Acronis to WINPESHL.INI and Windows PE would reboot when Acronis is closed. Happily I found a way to disable that behavior.

I’ve never done any C++ coding before, special thanks to Patrick Hahn for his articles about API Hooking and DLL injection and Tsuda Kageyu for sharing his MinHook library.

Finding the API Acronis uses to reboot Windows PE

I used the profiler that’s built into Dependency Walker to trace all API calls made by Acronis Backup. To do so you have open TrueImage.exe in Dependency Walker (ignore any errors) and start profiling by pressing F7.
Close Acronis and watch the output, before rebooting we can see it calls NtShutdownSystem from NTDLL.DLL – this is the API call we need to disable!

Profiling TrueImage.exe using Dependency Walker

Hooking/Overriding NtShutdownSystem

For simplicity I chose to build a small DLL using Visual C++ with the only purpose to replace NtShutdownSystem with a dummy method using MinHook. Please note that this is my first C++ application ever, so there’s propably a lot of room for improvements – feel free to to submit any better solutions:

#include <Windows.h>
#include <iostream>
#include <iomanip>
#include "MinHook.h"

typedef VOID(WINAPI *INITIATESHUTDOWN)(LPTSTR, LPTSTR, DWORD, DWORD, DWORD);
typedef enum _SHUTDOWN_ACTION {
	ShutdownNoReboot,
	ShutdownReboot,
	ShutdownPowerOff
} SHUTDOWN_ACTION, *PSHUTDOWN_ACTION;
typedef VOID(WINAPI *NTSHUTDOWNSYSTEM)(SHUTDOWN_ACTION Action);

NTSHUTDOWNSYSTEM fpNtShutdownSystem = NULL;
VOID WINAPI DetourNtShutdownSystem(SHUTDOWN_ACTION Action)
{
	//MessageBoxA(NULL, "NtShutdownSysten intercepted!", "NtShutdownSystemOverride", MB_OK | MB_ICONINFORMATION);
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved)
{
	switch (ul_reason_for_call)
	{
	case DLL_PROCESS_ATTACH:
		// Initialize MinHook
		if (MH_Initialize() != MH_OK)
		{
			MessageBoxA(nullptr, "Failed to initialize MinHook.", "NtShutdownSystemOverride", MB_OK | MB_ICONERROR);
		}
		else
		{
			// Load NTDLL.DLL
			HINSTANCE hNTDLL = LoadLibraryA("NTDLL.DLL");
			if (hNTDLL) {
				// Create NtShutdownSystem Hook
				LPVOID pfna = GetProcAddress(hNTDLL, "NtShutdownSystem");
				if (MH_CreateHook(pfna, &DetourNtShutdownSystem, reinterpret_cast<void**>((LPVOID)&fpNtShutdownSystem)) != MH_OK)
				{
					MessageBoxA(NULL, "Failed to create NtShutdownSystem hooked.", "NtShutdownSystemOverride", MB_OK | MB_ICONERROR);
				}
				else
				{
					// Enable NtShutdownSystem Hook
					if (MH_EnableHook(MH_ALL_HOOKS) != MH_OK)
					{
						MessageBoxA(NULL, "Failed to enable NtShutdownSystem hook!", "NtShutdownSystemOverride", MB_OK | MB_ICONERROR);
					}
				}
			}
			else
			{
				MessageBoxA(NULL, "Couldn't load NTDLL.DLL!", "NtShutdownSystemOverride", MB_OK | MB_ICONERROR);
			}
		}
		break;
	case DLL_THREAD_ATTACH:
		break;
	case DLL_THREAD_DETACH:
		break;
	case DLL_PROCESS_DETACH:
		MH_DisableHook(MH_ALL_HOOKS);
		MH_Uninitialize();
		break;
	}

	return TRUE;
}

To inject this DLL into Acronis Backup I’m using the injector from Patrick Hahn, I only modified it to run Acronis so I don’t have to run it and find the PID myself:

#include <Windows.h>
#include <iostream>

void Usage()
{
	std::cout << "Usage: DLLInjector.exe [Executable] [DLL]\n";
}

void EnableDebugPrivileges()
{
	HANDLE              hToken;
	LUID                SeDebugNameValue;
	TOKEN_PRIVILEGES    TokenPrivileges;

	if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
	{
		if (LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &SeDebugNameValue))
		{
			TokenPrivileges.PrivilegeCount = 1;
			TokenPrivileges.Privileges[0].Luid = SeDebugNameValue;
			TokenPrivileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

			if (AdjustTokenPrivileges(hToken, FALSE, &TokenPrivileges, sizeof(TOKEN_PRIVILEGES), NULL, NULL))
			{
				CloseHandle(hToken);
			}
			else
			{
				CloseHandle(hToken);
				throw std::runtime_error("Couldn't adjust token privileges!");
			}
		}
		else
		{
			CloseHandle(hToken);
			throw std::runtime_error("Couldn't look up privilege value!");
		}
	}
	else
	{
		throw std::runtime_error("Couldn't open process token!");
	}
}

int LaunchExecutable(LPCWSTR lpApplicationName) {
	STARTUPINFO sInfo;
	PROCESS_INFORMATION pInfo;
	int pid = NULL;

	ZeroMemory(&sInfo, sizeof(sInfo));
	sInfo.cb = sizeof(sInfo);
	ZeroMemory(&pInfo, sizeof(pInfo));

	if (CreateProcess(lpApplicationName, NULL, NULL, NULL, false, CREATE_NEW_CONSOLE, NULL, NULL, &sInfo, &pInfo))
	{
		pid = pInfo.dwProcessId;
		CloseHandle(pInfo.hThread);
		CloseHandle(pInfo.hProcess);
	}

	return pid;
}

wchar_t *ConvertCharArrayToLPCWSTR(const char* charArray)
{
	wchar_t* wString = new wchar_t[4096];
	MultiByteToWideChar(CP_ACP, 0, charArray, -1, wString, 4096);
	return wString;
}

int main(int argc, char *argv[])
{
	if (argc != 3)
	{
		Usage();
		return EXIT_FAILURE;
	}

	// Enable Debug Privileges
	try
	{
		EnableDebugPrivileges();
	}
	catch (std::runtime_error& e)
	{
		std::cerr << e.what() << "\n";
		return EXIT_FAILURE;
	}

	// Launch EXE
	int pidTarget = LaunchExecutable(ConvertCharArrayToLPCWSTR(argv[1]));
	if (pidTarget != NULL) {
		std::cout << "Target PID: " << pidTarget << "\n";
		std::string dll = argv[2];

		HANDLE remoteProcessHandle = OpenProcess(PROCESS_ALL_ACCESS, false, pidTarget);
		if (remoteProcessHandle == nullptr)
		{
			int error = GetLastError();
			std::cout << "Failed to open process. (Error " << error << ")\n";
			return EXIT_FAILURE;
		}

		// Allocate memory in the target's address space
		void* pathmem = VirtualAllocEx(remoteProcessHandle, nullptr, dll.size() + 1, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
		if (pathmem == nullptr)
		{
			int error = GetLastError();
			std::cout << "Failed to allocate memory. (Error " << error << ")\n";
			std::cin.ignore(std::cin.rdbuf()->in_avail());
			return EXIT_FAILURE;
		}

		// Write the path of the dll in the target's address space
		if (!WriteProcessMemory(remoteProcessHandle, pathmem, dll.c_str(), dll.size() + 1, nullptr))
		{
			int error = GetLastError();
			std::cout << "Failed to write into target's memory. (Error " << error << ")\n";
			std::cin.ignore(std::cin.rdbuf()->in_avail());
			return EXIT_FAILURE;
		}

		// Create a remote thread in the other process' address space
		HANDLE remoteThreadHandle = CreateRemoteThread(remoteProcessHandle, nullptr, 0, (LPTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandleA("kernel32.dll"), "LoadLibraryA"), pathmem, CREATE_SUSPENDED, nullptr);
		if (remoteThreadHandle == nullptr)
		{
			int error = GetLastError();
			std::cout << "Failed to run the thread. (Error " << error << ")\n";
			std::cin.ignore(std::cin.rdbuf()->in_avail());
			return EXIT_FAILURE;
		}

		// Let the process run
		ResumeThread(remoteThreadHandle);
		// Wait for it
		WaitForSingleObject(remoteThreadHandle, INFINITE);

		std::cout << "DLL successfully injected!\n";
	}
	else
	{
		std::cout << "Error launching taget application.\n";
		return EXIT_FAILURE;
	}

	return EXIT_SUCCESS;
}

Usage

DLLInjector.exe [Executable] [DLL]

A quick sample on how to run Acronis using the injector:

@ECHO OFF
NET START MMS
IF "%PROCESSOR_ARCHITECTURE%"=="AMD64" DLLInjector_x64.exe "X:\Program Files\Acronis\BackupAndRecovery\TrueImage.exe" "NtShutdownSystemOverride_x64.dll"
IF NOT "%PROCESSOR_ARCHITECTURE%"=="AMD64" DLLInjector_x86.exe "X:\Program Files\Acronis\BackupAndRecovery\TrueImage.exe" "NtShutdownSystemOverride_x86.dll"

Download Binaries

Download: NtShutdownSystemOverride Binaries (32/64 Bit) (35.14 kB)

Don’t forget to copy msvcp120.dll and msvcr120.dll to Windows PE.

]]>
http://sezz.at/blog/windows/howto-stop-acronis-backup-rebooting-windows-pe/feed/ 1
OpenELEC – Umstieg von USB als Bootdevice auf Netzwerk http://sezz.at/blog/it/openelec-umstieg-von-usb-als-bootdevice-auf-netzwerk/ http://sezz.at/blog/it/openelec-umstieg-von-usb-als-bootdevice-auf-netzwerk/#comments Fri, 20 Feb 2015 01:31:05 +0000 http://sezz.at/?p=2397 Da mein Low-Cost XBMC im Schlafzimmer beim Streamen desöfteren Probleme gemacht hat habe ich mich nun durchgerungen ein Upgrade von OpenELEC 3 auf OpenELEC 5 durchzuführen.

Im Zuge dessen habe ich auch gleich das ganze System vom USB Stick ins Netzwerk verlagert.

Die meisten HOWTOs gehen davon aus, dass jeder Dienst auf ein und derselben Maschine läuft, daher habe ich kurz zusammengefasst welche Einstellungen für meine spezifische Konfiguration notwendig waren.

Netzwerkaufbau

OpenELEC - Meine LAN Struktur für PXE Boot

Router: Linksys WRT54GL mit Tomato Firmware

  • DHCP Server

Fileserver: Ubuntu 11.04

  • TFTP Server
  • NFS Server

NAS: Synology DiskStation DS213j

  • NFS Server

Client: Zotac ZBOX-ID41 (Technische Daten)

  • OpenELEC

OpenELEC Upgrade auf Version 5 und Datensicherung

Vor der Umstellung auf PXE-Boot habe ich OpenELEC auf dem USB Stick noch auf die aktuelle Version aktualisiert. Das Update geht relativ problemlos, muss aber manuell durchgeführt werden.

Ich habe sicherheitshalber zuerst das Update von Version 3 auf Version 4 durchgeführt und dann erst auf Version 5.

Für das manuelle Update müssen aus dem OpenELEC Archiv die Dateien SYSTEM, SYSTEM.md5, KERNEL und KERNEL.md5 in das freigegebene Verzeichnis Update kopiert werden. Nach einem Neustart wird das Update automatisch installiert.

Als das alles erledigt war habe ich mit dem OpenELEC Plugin unter XBMC/Kodi noch ein Backup angelegt um nach der Umstellung die Einstellungen wieder importieren zu können (die Sicherung kann man sich danach aus dem freigegebenen Ordner Backup holen).

Konfiguration DHCP Server

Auf meinem Linksys Router läuft wie bereits erwähnt die Tomato Firmware und somit Dnsmasq. Um Anfragen an den TFTP Server weiterzuleiten reicht schon eine Zeile in der erweiterten Konfiguration, zu finden unter Advanced » DHCP / DNS » Dnsmasq Custom configuration:

dhcp-boot=pxelinux.0,,192.168.0.7

Syntax: Pfad zum Boot-Image, TFTP-Hostname, IP-Adresse des TFTP-Servers

Tomato DHCP Konfiguration

Ich vergebe auch noch gleich eine statische IP Adresse für den Client um später eine spezifische Boot-Konfiguration festlegen zu können bzw. für die NFS Freigabe – da dieser sowieso gerade im Netz ist kann diese unter Status » Device List einfach eingestellt werden. Dazu einfach auf den kleinen Link “[static]” bei der richtigen Mac Adresse klicken, danach auf “Add” (wichtig) und abspeichern. Wenn der Rechner gerade nicht im Netz hängt kann die IP auch manuell eingegeben, dafür wird aber die MAC Adresse benötigt.

Tomato DHCP Clients - festlegen einer statischen IP Adresse

Konfiguration NFS auf dem Synology NAS

Die Einrichtung läuft unter DSM 4.3 relativ unkompliziert ab. Zuerst muss NFS aktiviert werden, das erledigt man im Control Panel unter “Win/Mac/NFS”. Im Reiter “NFS Service” muss nur das Häcken bei “Enable NFS” gesetzt werden.

Synology DSM: Aktivieren von NFS

Dann lege ich noch im Control Panel unter “Shared Folder” eine Freigabe an, in meinem Fall nenne ich sie einfach nur “tftp”.

Die Freigabe per NFS wird dann per Rechtsklick auf die neue Freigabe unter Privileges » NFS Privileges aktiviert.

Synology DSM: NFS Berechtigungen Kontextmenü

Die Rechte werden hier nicht nach Benutzernamen vergeben sondern per IP Adressen/Hosts – Zum Testen habe ich die Freigabe fürs ganze Netzwerk gesetzt, daraus ergeben sich bei mir folgende Einstellungen:

Hostname or IP: 192.168.0.0/24
Privilege: Read/Write
Root squash: No mapping
Security: sys
[*] Enable asynchronous
[ ] Allow Connections from non-privileged ports (ports higher than 1024

Synology DSM: NFS Berechtigungen

Wer möchte kann die Freigabe auch noch per Samba den Windows Clients zur Verfügung stellen.

Abschließend habe ich noch schnell ein Unterverzeichnis “xbmc-schlafzimmer” angelegt, nur für den Fall dass ich später noch andere Clients einbinden möchte. Hier werden dann alle Daten von XBMC/Kodi landen.

Installation/Konfiguration TFTP & NFS auf dem Ubuntu Fileserver

Zuerstmal installieren wir die benötigten Pakete:

sudo apt-get install tftpd-hpa nfs-kernel-server syslinux

Die Boot Images liegen bei mir unter /mnt/storage/tftpboot, das Home Verzeichnis für OpenELEC befindet sich auf dem Synology NAS.

Konfiguration NFS Server

Ich habe nur folgenden Eintrag der Datei /etc/exports angehägt um den vom TFTP Server benötigten Pfad per NFS freizugeben:

/mnt/storage/tftpboot        192.168.0.0/255.255.255.0(ro,async,no_subtree_check,no_root_squash)

Nach der Änderung muss der Dienst mit service nfs-kernel-server restart neu gestartet werden.

Konfiguration TFTP Server

sudo mkdir -m777 /mnt/storage/tftpboot
sudo mkdir /mnt/storage/tftpboot/pxelinux.cfg
sudo cp -p /usr/lib/syslinux/pxelinux.0 /mnt/tftpboot/
sudo mkdir /mnt/storage/tftpboot/openelec-x86_64-5.0.2

In das Verzeichnis /mnt/storage/tftpboot/openelec-x86_64-5.0.2 werden die Dateien KERNEL und SYSTEM aus dem OpenELEC Archiv kopiert, ich habe das auf die Schnelle einfach per WinSCP erledigt.

In der Datei /etc/default/tftpd-hpa muss dann auch noch der Pfad zum TFTP Root angepasst werden, der Inhalt der Datei ist bei mir folgender:

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/mnt/storage/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure"

Konfguration des Bootmenüs

Das zu startende Image für die Netzwerkclients wird standardmäßig mit der Datei /mnt/storage/tftpboot/pxelinux.cfg/default festgelegt – um nur OpenELEC zu booten reicht zum Beispiel folgender Inhalt:

# Zotac OpenELEC XBMC/Kodi Client
DEFAULT openelec5
PROMPT 0

LABEL openelec5
KERNEL /openelec-x86_64-5.0.2/KERNEL
APPEND ip=dhcp boot=NFS=192.168.0.7:/mnt/storage/tftpboot/openelec-x86_64-5.0.2 disk=NFS=192.168.0.240:/volume1/tftp/xbmc-schlafzimmer

Hier wird automatisch OpenELEC gebootet – wer mehrere Clients hat kann für jeden auch eine eigene Konfiguration festlegen und per Default ein Bootmenü anzeigen lassen, ich habe zum Beispiel verschiedene Diagnosetools noch im Standardmenü und für den einen Client wird generell nur OpenELEC gestartet wie in dem oben angeführten Beispiel auch.

Nun muss nur noch der TFTP Dienst mit service tftpd-hpa restart neu gestartet werden.

Abschließende Worte

Wenn alle Pfade passen und die Dateien dort sind wo sie sein sollen müsste der PC nun übers Netzwerk mit der richtigen IP Adresse booten und direkt OpenELEC starten. Dann kann das zuvor erstellte Backup rüberkopiert werden und wiederhergestellt werden und alles (ausser dem Boot-Medium) sollte wieder sein wie vorher.

Bei mir hat sich zwar die Bootgeschwindigkeit weder verbessert noch verschlechtert, aber Thumbnails von YouTube werden nun beinahe ohne Verzögerung dargestellt, was ein großer Pluspunkt für mich ist. Wie lange der Bootvorgang dauert ist eher unerheblich, da der PC sowieso immer läuft und dann bei Nichtbenutzung nur noch im Standby ist – hat sich also auf jeden Fall für mich gelohnt.

Weiterführende Links

Icons zum Teil von Freepik und Icons8.

]]>
http://sezz.at/blog/it/openelec-umstieg-von-usb-als-bootdevice-auf-netzwerk/feed/ 0
s:UI for WildStar – Minimalistic WildStar UI http://sezz.at/blog/wildstar/minimalistic-wildstar-ui/ http://sezz.at/blog/wildstar/minimalistic-wildstar-ui/#comments Tue, 04 Nov 2014 16:05:12 +0000 http://sezz.at/?p=2383 My WildStar UI is now available on GitHub. As I stopped playing after the hype there won’t be any updates. Feel free to use the code for your own projects.

Important

  • There’s no configuration GUI
  • My settings are hardcoded because I don’t like setting up stuff upon creating a new char, but most stuff is still customizable by editing the Lua files.
  • It’s unfinished and I’m not working on it anymore.
  • It’s not tested in raiding environments and if you decide to disable RaidFrameBase you’ll need to add all needed entries (stuff like specifying member roles) to the context menu library as it currently only contains the entries found in ContextMenuPlayer
  • Please note: S (SezzUI) is currently a global variable for debugging reasons!

Screenshots

Raid Frames Auction House

Features (for Users)

  • Action Bars
  • Auction House Replacement (Implemented: Buying/Selling/Shopping Lists)
  • Auto-Repair, Auto-Vendor Trash
  • Bottom Menu Fading
  • Class Resources
  • CritLine
  • Data Text
  • Mini Map Modifications
  • Rare Alert + Focus
  • Ready Check
  • Sound Toggle (CTRL+S)
  • Slash Command Shortcuts
  • Unit/Raid Frames

Features (for Developers)

  • Aura Library (for displaying buffs/debuffs)
  • Context Menu Library (working, but incomplete)
  • Flat Tabbed Window Library
  • Flat Tree View Library
  • Unit Frames Library (fully customizable like oUF)
  • Pixel Font Package

Support

THERE IS NO SUPPORT FOR END-USERS.

However, if you are reusing code/libraries in your projects and have any questions feel free to ask.

Download/Fork

Sources are available on GitHub

]]>
http://sezz.at/blog/wildstar/minimalistic-wildstar-ui/feed/ 0
Lösung: 27″ iMac: Keine Maus/Tastatur unter Windows 7 http://sezz.at/blog/it/loesung-27-zoll-imac-keine-maus-tastatur-unter-windows-7-bootcamp/ http://sezz.at/blog/it/loesung-27-zoll-imac-keine-maus-tastatur-unter-windows-7-bootcamp/#comments Sat, 22 Jun 2013 16:47:47 +0000 http://sezz.at/?p=2372 Scheinbar gibt es mit den Intel USB Treibern Probleme die der BootCamp Assistent herunterlädt (Stand: 21. Juni 2013).

Abhilfe schafft der aktuellste Treiber direkt von Intel, integriert in das Installationsmedium!

Das komplette Treiberpaket für den Intel(R) USB 3.0 eXtensible Host Controller gibt es bei Intel:

  • File: Intel(R)_USB_3.0_eXtensible_Host_Controller_Driver.zip
  • Version: 1.0.8.251
  • Date: 03/30/2013

Benötigt wird von dem Paket aber nur der eigentliche Treiber!

Der Treiber befindet sich in der ZIP Datei unter Intel(R)_USB_3.0_eXtensible_Host_Controller_Driver\Drivers\Win7. Am einfachsten ist es, wenn man den Ordner direkt auf den (mit BootCamp erstellten) Windows USB Stick ins Verzeichnis $WinPEDriver$ kopiert. Je nach der zu installierenden Version nimmt man entweder den x86 Ordner für 32 Bit oder den x64 Ordner für 64 Bit.

Das Paket mit den Treibern (ohne zusätzlicher Software) steht hier zum Download bereit:
Intel USB 3.0 eXtensible Host Controller (Driver Only) (945.87 kB)

Verzeichnisstruktur auf dem USB Stick:

\$WinPEDriver$
	\Intel(R)_USB_3.0_eXtensible_Host_Controller_Driver
		iusb3hub.cat
		iusb3hub.inf
		IUsb3Hub.man
		iusb3hub.sys
		iusb3xhc.cat
		iusb3xhc.inf
		iusb3xhc.man
		iusb3xhc.sys

Mit dem modifizierten USB Stick dann einfach nochmal die Windows Installation durchlaufen lassen (beim Einschalten des iMac mit gedrückter Alt-Taste den USB Stick als Bootmedium auswählen um die Installation zu starten).

Alternativ kann auch im abgesicherten Modus (F8) der alte USB Treiber deinstalliert werden, der neue muss dann aber manuell über den Geräte-Manager eingebunden werden!

]]>
http://sezz.at/blog/it/loesung-27-zoll-imac-keine-maus-tastatur-unter-windows-7-bootcamp/feed/ 11
Excel Zellenformat Dateigröße Deutsch (KB/MB/GB) http://sezz.at/blog/office/excel-zellenformat-dateigroesse-deutsch-kb-mb-gb/ http://sezz.at/blog/office/excel-zellenformat-dateigroesse-deutsch-kb-mb-gb/#comments Thu, 16 May 2013 10:37:42 +0000 http://sezz.at/?p=2347 Benutzerdefinierter Zellenformatierungstyp um Dateigrößen in Excel darzustellen:

  • Dezimaltrennzeichen: ,
  • Symbol für Zimmerngruppierung: .

Formatierungstyp in Excel:

[<1000] #.##0,00" KB ";[<1000000]#.##0,00." MB";#.##0,00.." GB"

Originalbeitrag: Stack Overflow

]]>
http://sezz.at/blog/office/excel-zellenformat-dateigroesse-deutsch-kb-mb-gb/feed/ 0
iPhone SMS Zentrale abfragen/bearbeiten http://sezz.at/blog/iphone/sms-zentrale-abfragen-und-aendern/ http://sezz.at/blog/iphone/sms-zentrale-abfragen-und-aendern/#comments Thu, 23 Aug 2012 10:08:04 +0000 http://sezz.at/?p=2331 SMS Zentrale abfragen:
*#5005*7672#

SMS Zentrale setzen (Beispiel mit A1):
*5005*7672*+436640501#

Die Rückmeldung “Einstellen von erfolgreich Adresse für Dienst-Center Keine Adresse” ist etwas verwirrend (vielleicht auch nur in iOS6?), beschreibt aber die erfolgreiche Änderung.

]]>
http://sezz.at/blog/iphone/sms-zentrale-abfragen-und-aendern/feed/ 2
Mists of Pandaria Beta Addon Fixes/Changes http://sezz.at/blog/wow/mop-beta-addon-fixes-changes/ http://sezz.at/blog/wow/mop-beta-addon-fixes-changes/#comments Wed, 18 Apr 2012 19:21:06 +0000 http://sezz.at/?p=2249 I created a simple Addon that emulates old (and most commonly used) LUA functions and frame templates from Cataclysm, because I’m too lazy to fix addons I didn’t code myself everytime when Blizzard changes the API or removes other stuff during the beta.

Big thanks to _Mike from OwnedCore for releasing a simple hack that allows us to use Addons in the current beta client. (It’s not my fault if you get banned for using this! Also don’t report errors to Blizzard caused by faulty addons!)

Functions

Frame Templates

  • UIPanelButtonTemplate2

Debugging

You can enable a short debugging info be setting outputDebugInfo to true. It should only display every error once (but sometimes it’s buggy and debugstack() returns nothing useful – I didn’t invest a lot time in this, at least the line numbers are working, I also didn’t care about CPU efficiency.)

Other Changes

Tested/Working Addons

Download

Current release (April 20, Client: 5.0.1-15589): s:Legacy (2.93 kB)

If you think there’s something important missing or I interpreted a function/template wrong please leave a comment!

Updated Addons

If you came here looking for Mists of Pandaria addons, I updated those I regularly use:

You may find other addons here.

]]>
http://sezz.at/blog/wow/mop-beta-addon-fixes-changes/feed/ 3
Microsoft Money 98 Inno Setup Script http://sezz.at/blog/it/microsoft-money-98-inno-setup-script/ http://sezz.at/blog/it/microsoft-money-98-inno-setup-script/#comments Wed, 11 Apr 2012 17:31:00 +0000 http://sezz.at/?p=2201 Vielleicht noch für jemandem von Nutzen – Pfade zu den Quelldateien müssen logischerweise angepasst werden.

Money 98 sollte damit problemlos unter Windows Vista und Windows 7 lauffähig sein.

Achtung: Beim Erstellen der Registry Einträge für HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{B2A7FD52-301F-4348-B93A-638C6DE49229} wird unter Windows 7 ein Fehler gemeldet, das kann ignoriert werden. Alternativ einfach aus dem Script entfernen, die Einträge sind scheinbar auf aktuellen Systemen sowieso bereits vorhanden.

Download: Microsoft Money 98 Inno Setup (9.36 kB)

]]>
http://sezz.at/blog/it/microsoft-money-98-inno-setup-script/feed/ 0
Kaspersky Installation mit Auswahl der Komponenten http://sezz.at/blog/it/kaspersky-installation-benutzerdefiniert/ http://sezz.at/blog/it/kaspersky-installation-benutzerdefiniert/#comments Wed, 11 Apr 2012 15:53:17 +0000 http://sezz.at/?p=2209 Schon seit einiger Zeit verzichtet Kaspersky bei der Installation auf das Auswahlmenü für die benötigten Komponenten – man kann aber trotzdem die zu installierenden Features manuell als Parameter übergeben. Folgende Komponenten stehen dabei zur Auswahl:

Komponenten/Features

  • Kaspersky Anti-Virus 2012/Kaspersky Internet-Security 2012 (WholeProductFeature)
    bietet den komplexen Schutz Ihres Computers vor beliebigen Bedrohungen und gefährlichen Programmen.
    • Programmkern und Untersuchungsaufgabe (AVScannerAndCoreFeature)
      Die Untersuchungsaufgabe erlaubt es, auf Befehl des Benutzers eine ausführliche Untersuchung des Computers auf gefährliche Objekte vorzunehmen.
    • Anti-Banner (AntiBannerFeature)
      Anti-Banner sperrt die Anzeige von Werbebannern.
    • Anti-Spam * (AntiSpamFeature)
      Anti-Spam bietet Schutz vor unerwünschen E-Mails.
    • Datei-Anti-Virus (FileAntiVirusFeature)
      Datei-Anti-Virus bietet Schutz für alle Dateien auf Ihrem Computer im Augenblick, in dem auf sie zugegriffen wird.
    • IM-Anti-Virus (InstantMessengerFeature)
      IM-Anti-Virus untersucht den Datenverkehr von Instant Messengern.
    • Schutz vor Netzwerkangriffen * (IntrusionShieldFeature)
      Der Schutz vor Netzwerkangriffen verhindert den unerlaubten Zugriff auf und den Diebstahl von Informationen auf Ihrem Computer.
    • Mail-Anti-Virus (MailAntiVirusFeature)
      Mail-Anti-Virus gewährleistet die Überwachung aller ein- und ausgehenden E-Mails auf Viren.
    • Kindersicherung * (ParentalControlFeature)
      Die Kindersicherung kann die Arbeit auf dem Computer und den Start von Programmen, den Zugriff auf Internet-Ressourcen sowie Konversationen über Instant Messenger einschränken.
    • Proaktiver Schutz (ProactiveDefenseFeature)
      Der Proaktive Schutz erlaubt die Abwehr unbekannter Bedrohungen und die Kontrolle über Veränderungen der Systemregistrierung sowie den Start von Programmen.
    • Aktivitätsmonitor (SystemWatcherFeature)
      Der Aktivitätsmonitor sammelt Daten über die Aktionen der Programme auf Ihrem Computer.
    • Microsoft Visual C++ 2008 Redistributable Package (x64) (VCRedistX64)
    • Virtuelle Tastatur * (VirtualKeyboardFeature)
      Die Virtuelle Tastatur schützt alle einzugebenden Informationen vor Keyloggern.
    • Web-Anti-Virus (WebAntiVirusFeature)
      Web-Anti-Virus verhindert, dass Viren über das HTTP-Protokoll in Ihren Computer eindringen.
      • Zusätzliche Features von Web-Anti-Virus (WebAntiVirusAdvancedFeature)
    • Programmkontrolle * (HIPSFeature)
      Die Programmkontrolle gewährleistet den Schutz vor unbekannten Bedrohungen sowie die Kontrolle über Veränderungen der Systemregistrierung und den Start von Programmen.
      • Firewall * (FirewallFeature)
        Die Firewall kontrolliert alle Netzwerkverbindungen und erkennt Angriffsversuche auf Ihren Computer.
      • Online-Banking (OnlineBankingFeature)
      • Sichere Umgebung (SandboxFeature)

* Nur in der Version Kaspersky Internet Security verfügbar.

Beispiel-Installationsaufruf

MSIEXEC /I KAVKIS.MSI ADDLOCAL=AVScannerAndCoreFeature,FileAntiVirusFeature,MailAntiVirusFeature SKIPPRODUCTCHECK=1 /qb REBOOT=ReallySuppress

Silent-Installation (/qb) von Programmkern und Untersuchungsaufgabe (AVScannerAndCoreFeature), Datei-Anti-Virus (FileAntiVirusFeature) und Mail-Anti-Virus (MailAntiVirusFeature) ohne Neustart (REBOOT=ReallySuppress) und ohne auf bereits installierte Anti-Virus-Lösungen zu überprüfen (SKIPPRODUCTCHECK=1).

Die benutzerdefinierte Installation wird nicht offiziell unterstützt!

Bei Problemen einfach mit anderen Kombinationen testen (ich nehme meistens nur Datei- und Mail-Anti-Virus, da das für mich ausreichend ist).

Lizenzierung und Download

]]>
http://sezz.at/blog/it/kaspersky-installation-benutzerdefiniert/feed/ 0
SW:ToR Forum – Disable Link Popup http://sezz.at/blog/swtor/swtor-forum-disable-link-popup/ http://sezz.at/blog/swtor/swtor-forum-disable-link-popup/#comments Sat, 07 Jan 2012 19:31:09 +0000 http://sezz.at/?p=2186 Annoying warnings like this one won’t help making the web safe for idiots:

Install my userscript to disable it:

// ==UserScript==
// @name            SWTOR Forum: Disable Link Popup
// @description     Disables the annoying warning when clicking on external links. [Martin Karer, http://www.sezz.at]
// @namespace       sezz.at_swtor.com_disable_link_popup
// @include         http://*swtor.com*/community/*
// ==/UserScript==

var $ = unsafeWindow.jQuery;
$(document).ready(function() {
	$("a").die("click");
});

Download: SW:ToR Forum No Link Popup Userscript (413 bytes)

]]>
http://sezz.at/blog/swtor/swtor-forum-disable-link-popup/feed/ 1