<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
	<title>Just Let It Trickle</title>
	<link>http://www.gamedev.net/blog/909-just-let-it-trickle/</link>
	<description>Just Let It Trickle Syndication</description>
	<pubDate>Fri, 25 Jan 2013 21:36:50 +0000</pubDate>
	<webMaster>support@gamedev.net (GameDev.net)</webMaster>
	<generator>IP.Blog</generator>
	<ttl>60</ttl>
	<item>
		<title>Plug in to CL’s Kitchen</title>
		<link>http://www.gamedev.net/blog/909/entry-2255984-plug-in-to-cl’s-kitchen/</link>
		<category></category>
		<description><![CDATA[It's well known that Visual Studio's C compiler hasn't progressed much beyond C89, save for things like variadic macros. What might not be quite as well known is that to rectify this a bit, somebody <a href='http://github.com/mstorsjo/c99-to-c89' class='bbc_url' title='External link' rel='nofollow external'>created a C99 to C89 converter</a>. A decent tool to be sure, but it doesn't integrate well into Visual Studio. Being a seperate program means you have to fudge things to run it instead of cl.exe, or you have to set a pre-build step, save the processed output and then compile those files instead of the ones in your project. It's not terribly friendly for IDE purposes. Wouldn't it be nice if there was a way to intercept the compilation and process the source files as it goes? What isn't well known is that you can do that, with compiler plugins.<br /><br />The good news about these plugins is that unlike IDE ones such as Visual AssistX, the support is directly in the compiler so you don't have to have a pay-for version to use them. You see, not only does cl.exe have the plethora of options it displays as help, it has undocumented ones too. Ones which allow you to change or add compiler passes and pass your own arguments to them.<br /><br />Continue reading on <a href='http://blog.airesoft.co.uk/2013/01/plug-in-to-cls-kitchen/#jump' class='bbc_url' title='External link' rel='nofollow external'>Just Let It Flow</a>...]]></description>
		<pubDate>Fri, 25 Jan 2013 16:40:00 +0000</pubDate>
		<guid>http://www.gamedev.net/blog/909/entry-2255984-plug-in-to-cl’s-kitchen/</guid>
	</item>
	<item>
		<title>Dropping Like Files - Zipping Without Libraries on Windows</title>
		<link>http://www.gamedev.net/blog/909/entry-2255239-dropping-like-files-zipping-without-libraries-on-windows/</link>
		<category></category>
		<description><![CDATA[If you haven't been living under a rock (or in a non-Windows world) you'll know that since XP, Windows has had zip file extraction and creation. You may also know that what it doesn't have, is a defined API so us normals can leverage it programmatically. But there are ways and means.<br /><br />Think about it, the usual way you'd interact with zip files is through the shell. You'd highlight a bunch a files and "Send To" a Compressed Folder or drag them into an existing folder and voila. There's obviously some code behind that's actually doing those things, and since you can do them from 'Open File' dialogs and the like, it can't be code within the Explorer executable.<br /><br />You can search Google all you want, but you'll only find that MSDN isn't sandbagging and there are no directly exported functions to create zips. What you may find is that shell32 and friends do have functions and interfaces to duplicate the Shell's methods of dragging, dropping and sending to, so that seems a good lead to follow...<br /><br />Continue reading on <a href='http://blog.airesoft.co.uk/2012/10/dropping-like-files-zipping-without-libraries/#create' class='bbc_url' title='External link' rel='nofollow external'>Just Let It Flow</a>]]></description>
		<pubDate>Wed, 17 Oct 2012 20:54:00 +0000</pubDate>
		<guid>http://www.gamedev.net/blog/909/entry-2255239-dropping-like-files-zipping-without-libraries-on-windows/</guid>
	</item>
	<item>
		<title><![CDATA[Things Up Microsoft's Sleeve - Console Graphics]]></title>
		<link>http://www.gamedev.net/blog/909/entry-2255198-things-up-microsofts-sleeve-console-graphics/</link>
		<category></category>
		<description><![CDATA[<a href='http://msdn.microsoft.com/en-us/library/ms682122(v=vs.85).aspx' class='bbc_url' title='External link' rel='nofollow external'>CreateConsoleScreenBuffer</a>, what a fabulous function. You ask it nicely, and it gives you as many 'console window content' buffers as you want. With the other supporting functions it's everything you need for a AAA game (ascii-art-animation natch). But backup a minute here. what's that mysteriously reserved parameter for and why is there a flags argument with a weasely worded "only supported screen buffer type"? Sounds like there's something else it can (or at least could) do.<br /><br />Sure enough, there is. For the function really doesn't just have one defined buffer type, it has two. The second is the truthfully, if optimistically, named CONSOLE_GRAPHICS_BUFFER. Now doesn't that sound fancy? I mean, non-ascii graphics in the console, groovy!<br /><br />The creation of this 'graphics buffer' works via the magic of that bogus 'reserved' last parameter. Forget about your regions and device contexts though, where we're going is much more low-tech.<br /><br />Read the rest on <a href='http://blog.airesoft.co.uk/2012/10/things-ms-can-do-that-they-dont-tell-you-about-console-graphics/#struct' class='bbc_url' title='External link' rel='nofollow external'>Just Let It Flow</a>]]></description>
		<pubDate>Mon, 08 Oct 2012 15:05:00 +0000</pubDate>
		<guid>http://www.gamedev.net/blog/909/entry-2255198-things-up-microsofts-sleeve-console-graphics/</guid>
	</item>
	<item>
		<title>WindowWatcher is Here</title>
		<link>http://www.gamedev.net/blog/909/entry-2254740-windowwatcher-is-here/</link>
		<category></category>
		<description><![CDATA[<a href='http://www.gamedev.net/blog/909/entry-2249515-watching-the-windows-go-by/' class='bbc_url' title=''>Way back in the mysts o' tyme</a> I told a tale of a little <a href='http://www.airesoft.co.uk/windowwatcher' class='bbc_url' title='External link' rel='nofollow external'>picture-in-picture / interactive zoom tool</a> I was working on. Well, a whole year and 4 months later I got round to fixing the buggy bits and <a href='http://www.airesoft.co.uk/help/windowwatcher' class='bbc_url' title='External link' rel='nofollow external'>wrote some help pages</a>. Now it's ready for public consumption as an <a href='http://www.airesoft.co.uk/files/wwsetup.exe' class='bbc_url' title='External link' rel='nofollow external'>Installer</a>, or just a <a href='http://www.airesoft.co.uk/files/ww.zip' class='bbc_url' title='External link' rel='nofollow external'>Zip</a>.<br /><br />It's simple to use. You pick an open window<br /><span rel='lightbox'><span rel='lightbox'><img class='bbc_img' src='http://img834.imageshack.us/img834/9707/chooseq.png' alt='Posted Image' class='bbc_img' /></span></span><br /><br />And you get another window (optionally always on top) that displays th chosen windows' live client area:<br /><span rel='lightbox'><span rel='lightbox'><img class='bbc_img' src='http://img19.imageshack.us/img19/8148/starteu.png' alt='Posted Image' class='bbc_img' /></span></span><br /><br />From there you can interact with the source window just as you would the real one with mouseover effects, button clicks etc But that's a bit boring, and with large windows the contents are all small like, so what you can do is select an area<br /><span rel='lightbox'><span rel='lightbox'><img class='bbc_img' src='http://img832.imageshack.us/img832/4495/zoomselect.png' alt='Posted Image' class='bbc_img' /></span></span><br /><br />and be zoomed into that<br /><span rel='lightbox'><span rel='lightbox'><img class='bbc_img' src='http://img43.imageshack.us/img43/5614/zoomed.png' alt='Posted Image' class='bbc_img' /></span></span><br /><br />Then you can resize the window to enlarge or reduce the size of the content<br /><span rel='lightbox'><span rel='lightbox'><img class='bbc_img' src='http://img442.imageshack.us/img442/9924/zoomedlarge.png' alt='Posted Image' class='bbc_img' /></span></span><br /><br />Finally, because it'd be rude not to, you can still interact with the now zoomed and enlarged content<br /><span rel='lightbox'><span rel='lightbox'><img class='bbc_img' src='http://img521.imageshack.us/img521/5227/zoominteract.png' alt='Posted Image' class='bbc_img' /></span></span><br /><br />If you prefer to see it in moving action, I whipped up an 'ad' on my first go round last year.<br /><br />http://www.youtube.com/embed/A5k8pKAUtOg?rel=0<br /><br />It requires Windows Vista, 7, or 8 and Aero to be enabled and that's about it. It weighs in at about 150K soaking wet and uses a whopping 1.5MB of memory, so if it looks useful, have a go with it. <br /><br /><a href='http://www.airesoft.co.uk/files/wwsetup.exe' class='bbc_url' title='External link' rel='nofollow external'>Installer</a>, <a href='http://www.airesoft.co.uk/files/ww.zip' class='bbc_url' title='External link' rel='nofollow external'>Zip</a>.]]></description>
		<pubDate>Fri, 22 Jun 2012 00:23:00 +0000</pubDate>
		<guid>http://www.gamedev.net/blog/909/entry-2254740-windowwatcher-is-here/</guid>
	</item>
	<item>
		<title>Native Only Apps with VS Express for Win8</title>
		<link>http://www.gamedev.net/blog/909/entry-2254695-native-only-apps-with-vs-express-for-win8/</link>
		<category></category>
		<description><![CDATA[Microsoft say "Visual Studio Express 2012 for Windows 8 provides tools for Metro style app development. To create desktop apps, you need to use Visual Studio Professional 2012, or higher."<br /><br />That isn't quite true. In fact, there's no quite about it. In the current RC version on MSDN, it's downright wrong, and simple to achieve too.<br /><br /><span class='bbc_underline'>So how do you do it?</span><br /><br />Before starting the IDE, navigate to<br />%programfiles%&#092;msbuild&#092;Microsoft.cpp&#092;v4.0&#092;v110&#092;1033<br />Open general_appcontainer.xml and find the line that contains &lt;BoolProperty Name="WindowsAppContainer", and change the readonly property to false, from its default of true and save. You may need to save the modified file elsewhere and copy the file over the original depending on UAC and permission settings.<br /><br />Open the IDE and create a Visual C++-&gt;Blank App (XAML) project<br /><br />When created, you can delete almost all things it puts in there. The xaml files, the appxmanifest, the assets and common folders and if you don't need or want precompiled headers you can delete both pch files too.<br /><br />Now, right click the project file and change these values:<br /><br />Configuration Properties-&gt;General and switch Metro Style App to false.<br /><br />And there you go! You can compile and debug native, WinRT-less apps using the old guard of WNDCLASSEX and GetModuleHandle type stuff from when men were men and women even moreso. You'll need to readd UNICODE, _UNICODE, _DEBUG/NDEBUG to the preprocessor directives if you need them, and re-enable pdb-generation and the subsystem type in the linker settings.<br /><br />The only major downside is that the Win32 SDK that comes with this version is severely lacking many major things such as bits for the common controls and GDI32.lib etc. If you have an older SDK you can point it at though, it's isn't that bad. if you don't, you'll also have to remove the entries that aren't kernel32.lib and user32.lib in Linker-&gt;Input or generate lib files from the dlls using link.exe.<br /><br /><span class='bbc_underline'>What does turning the Metro switch off do?</span><br /><br />Unsets C/C++-&gt;General-&gt;Consume Windows Runtime Extensions (No)<br />This removes the dependency on vscorlib110.dll<br /><br />Unsets the WINAPI_FAMILY define, which winapifamily.h defaults to WINAPI_FAMILY_DESKTOP_APP<br />This enables the functions marked in the SDK as being for desktop apps only (basically all the ones you're familiar with from Win32).<br /><br />Unsets Linker-&gt;Windows Metadata-&gt;Generate Windows Metadata<br />Stops the generation of winmd files which have no purpose for non WinRT apps<br /><br />Removes the non IDE Linker setting: /AppContainer<br />This turns off the new for Windows 8 <span style='font-size: 10px;'>IMAGE_DLLCHARACTERISTICS_APPCONTAINER </span>flag in the Optional PE Header, and lowers the OS and Subsystem version of the generated exe down to 6.0 (Vista) levels (the default is 6.2 (Win 8))<br /><br />And that's about it as important stuff goes. Deleting one character and changing three others has turned Microsoft from paragons of virtue, into rotten stinking liars.<br /><br />If you're only interested in the updated C++ 11 toolchain, it's probably just easier to copy the VC&#092;bin, VC&#092;include and VC&#092;lib directories and use them side by side with your current install of VS. The compiler binaries run on Vista+ as long as msvcr110.dll is in the path somewhere.]]></description>
		<pubDate>Sun, 03 Jun 2012 01:40:00 +0000</pubDate>
		<guid>http://www.gamedev.net/blog/909/entry-2254695-native-only-apps-with-vs-express-for-win8/</guid>
	</item>
	<item>
		<title><![CDATA[No Hooks Please, We're British - Thread Creation Notification]]></title>
		<link>http://www.gamedev.net/blog/909/entry-2254660-no-hooks-please-were-british-thread-creation-notification/</link>
		<category></category>
		<description><![CDATA[If what you're writing already requires a dll, or you can augment an existing one, then you're already set and can use the fact that DllMain gets called when threads are created and destructed to your advantage. If you're not, or can't then you're pretty much stuck for an answer. Conventional wisdom on the web seems to revolve around hooking CreateThread or even use the kernel based notification scheme. However making a whole driver is overkill and with several methods of creating threads called at various levels of Windows, hooking isn't always sufficient either, especially if you want to execute code in the thread context. WMI is also a technical possibility, but with its '10,000 lines of code where 10 will do' philosophy, that's where its staying.<br /><br />Dll thread_attach notifications work because when threads are created and torn down, ntdll loops around the internal structures corresponding to each module loaded in the process and calls their entry point if they meet certain criteria. The structure for the exe is included in the enumeration but as it doesn't identify as a dll, its entry point isn't called. The thing to do then, is modify the structure to a) look like a dll and b) make it think our entry point is a DllMain...<br /><br />Continue reading on <a href='http://blog.airesoft.co.uk/2012/05/process-thread-creation-notification-the-easy-way/#cont' class='bbc_url' title='External link' rel='nofollow external'>Just Let It Flow</a>]]></description>
		<pubDate>Sat, 26 May 2012 02:31:00 +0000</pubDate>
		<guid>http://www.gamedev.net/blog/909/entry-2254660-no-hooks-please-were-british-thread-creation-notification/</guid>
	</item>
	<item>
		<title><![CDATA[Leveraging Windows' Built In Disassembler]]></title>
		<link>http://www.gamedev.net/blog/909/entry-2254516-leveraging-windows-built-in-disassembler/</link>
		<category></category>
		<description><![CDATA[Wait, there's a disassembler built into Windows? Well, only in the sense that a supermarket that has the ingredients to build a cake. There's no ready made pastry hidden away in the depths of system32, unlike there is for file hashing <sup class='bbc'> </sup>.<br /><br />What there is though, is an aisle full of ingredients going by the name of DbgEng.dll. This fellow forms part of the debugging tools triumverate with its more illustrious counterpart dbghelp.dll and the mysterious symsrv.dll. DbgEng contains the interfaces which make up WinDbg's core functionality, a portion of such is disassembling. So, being the sort of chef who would appear on a Gordon Ramsay show in quite short order, I rustled up a quick messily coded bun.<br /><br />It's not IDA or Hiew, it's not meant to be. But for an 'objdump -d' like, quick and dirty tool that handles the 3 most common Windows architectures (as well as ARM and Alpha!) and doesn't require a toolchain to be installed, it's perfectly acceptable for my uses. It may be for others too, so have at it if you should so desire.<br /><br />Download it <a href='http://www.airesoft.co.uk/files/disasm.zip' class='bbc_url' title='External link' rel='nofollow external'>here</a><br /><br /><span rel='lightbox'><span rel='lightbox'><img class='bbc_img' src='http://img707.imageshack.us/img707/1391/x64out.png' alt='Posted Image' class='bbc_img' /></span></span><br /><br />AMD64 output with symbols.<br /><br /><span rel='lightbox'><span rel='lightbox'><img class='bbc_img' src='http://img526.imageshack.us/img526/5710/armout.png' alt='Posted Image' class='bbc_img' /></span></span><br /><br />ARM output from files compiled by eMbedded VC.<br /><br />The code was to be part of a larger project which never was and so, is in a terrible state mixed with this library and that. In scant consolation,&nbsp;&nbsp;below are the basic steps to how it works, and how you can do it yourself if you're suitably deranged. The help for these interfaces and functions is on MSDN (obviously) and also the debugger.chm help file that comes with the <a href='http://msdn.microsoft.com/en-us/windows/hardware/gg463009' class='bbc_url' title='External link' rel='nofollow external'>Debugging Tools For Windows package</a> which also houses the up to date headers, libs, and other helpful little programs.<br /><br /><div class='bbc_spoiler'>
	<span class='spoiler_title'>Pseudocode steps</span> <input type='button' class='bbc_spoiler_show' value='Show' />
	<div class='bbc_spoiler_wrapper'><div class='bbc_spoiler_content' style="display:none;"><br />// setup<br />DebugCreate(IDebugClient)<br />IDebugClient-&gt;QueryInterface(IDebugControl)<br />IDebugControl-&gt;SetOutputCallbacks()<br />IDebugClient-&gt;SetEventCallbacks()<br />// launch the helper process<br />IDebugClient-&gt;CreateProcessAndAttach(0, "host.exe", DEBUG_ONLY_THIS_PROCESS, 0, 0)<br />IDebugControl-&gt;WaitForEvent()<br />// set the default symbol options<br />IDebugClient-&gt;QueryInterface(IDebugSymbols3)<br />IDebugSymbols3-&gt;SetSymbolOptions(SymbolOptions);<br />// unload all the existing symbols<br />IDebugSymbols3-&gt;GetNumberModules()<br />foreach(module)<br />{<br />IDebugSymbols3-&gt;GetModuleParameters(ModParams)<br />IDebugSymbols3-&gt;GetModuleNames(ModParams.Base, moduleName)<br />IDebugSymbols3-&gt;Reload("/u " + moduleName")<br />}<br />// map the file to be disassembled into the relevant processes<br />MappedFile = MapAsDataFileInCurrentProcess("C:&#092;Mod&#092;&#092;to&#092;&#092;disasm.dll")<br />IDebugControl-&gt;SetEffectiveProcessorType(MappedFile-&gt;NtHeaders.FileHeader.Machine)<br />MappedAddress = MapDataFileAsExeIntoHostExe(out MappedSize) // 1<br />// load it as a virtual module in the target process<br />IDebugSymbols3-&gt;Reload("/s /f /w &lt;moduleName&gt;=&lt;MappedAddress&gt;,0x&lt;MappedSize&gt;)<br />// check that it loaded where we want it<br />IDebugSymbols3-&gt;GetModuleByModuleName(&lt;ModuleNameMinusExt&gt;, &realModuleBase)<br />// if not, load a second virtual module at this address<br />// this is so any absolute addressed symbols can be resolved<br />if(realModuleBase != MappedFile-&gt;NtHeaders.OptionalHeader.ImageBase)<br />{<br />	IDebugSymbols3-&gt;Reload("/s /f /w &lt;moduleName&gt;=&lt;OptionalHeader.ImageBase&gt;,0x&lt;OptionalHeader.SizeOfImage&gt;)<br />}<br />// get setup for the disassembly<br />IDebugControl-&gt;SetAssemblyOptions(DEBUG_ASMOPT_*)<br />From there you can enumerate the symbols using:<br />IDebugSymbols3::GetSymbolEntriesByName("&lt;moduleName&gt;!*", &numSymbols)<br />for(numSymbols)<br />{<br />	IDebugSymbols3::GetSymbolEntryInformation(symId, &entry);<br />	IDebugSymbols3::GetSymbolEntryString(symId)<br />}<br />or get the sections via investigating the Nt and section headers of the mapped file<br />and then output the disassembly via:<br />DEBUG_SYMBOL_ENTRY symEntry = /**/;<br />ULONG64 endOfInstruction = symEntry.Offset;<br />ULONG64 endOfSymbol = symEntry.Offset + symEntry.Size; // 2<br />while(endOfInstruction &lt; endOfSymbol)<br />{<br />	IDebugControl::OutputDisassembly(DEBUG_OUTCTL_THIS_CLIENT, endOfInstruction, DEBUG_DISASM_MATCHING_SYMBOLS, &endOfInstruction);<br />}<br />--- end<br /><br />1. MapDataFileAsExeIntoHostExe() should map the file and its sections as if it were to be executed, e.g. with the section alignment specified in the NtHeader. The handle to the host.exe process is given to you by DbgEng through the IDebugEventCallbacks::CreateProcess callback. Use MapViewOfFileEx or equivalent to attempt to map the file at it's preferred base address (MappedFile-&gt;NtHeaders.OptionalHeader.ImageBase)<br />2. Some symbols don't have a size entry. In this case, DisAsm sorts all symbols by offset and takes the start of the next symbol as the end of the current one.<br /></div></div>
</div><br /><br />  - The lesser known tool is certutil.exe, the command line to hash files is<br />certutil -hashfile &lt;file&gt; &lt;hash name&gt;<br />Hash name can be SHA1, SHA256, SHA384, SHA512, MD2, MD4, MD5, must be uppercase]]></description>
		<pubDate>Wed, 25 Apr 2012 15:33:00 +0000</pubDate>
		<guid>http://www.gamedev.net/blog/909/entry-2254516-leveraging-windows-built-in-disassembler/</guid>
	</item>
	<item>
		<title>Chroot-ing in Windows - As Easy As A:, B:, C:</title>
		<link>http://www.gamedev.net/blog/909/entry-2254056-chroot-ing-in-windows-as-easy-as-a-b-c/</link>
		<category></category>
		<description><![CDATA[Linux people who have to work in Windows are sometimes found lamenting about the basic tools it has which are absent from Microsoft's product. While recent developments of Windows have implemented variously featured versions of whoami, ln, cat, grep, ps and chmod, one app that's so far evaded the conversion is chroot.<br /><br />Whatever the reason may be for its absence, it is definitely not because there's is no support mechanism for it. Just like in Linux, it's a single function call.<br /><br /><pre class='prettyprint lang-auto linenums:0'>
NtSetInformationProcess(hProcess, ProcessDeviceMap, &hObjectDirectory, sizeof(hObjectDirectory));
</pre><br />Ok, so it's <em class='bbc'>technically</em> one function call, but there needs to be a bit of setup beforehand...<br /><br />Continue reading on <a href='http://blog.airesoft.co.uk/2012/01/chroot-ing-in-windows-as-easy-as-a-b-c/#what' class='bbc_url' title='External link' rel='nofollow external'>Just Let it Flow</a>]]></description>
		<pubDate>Tue, 17 Jan 2012 00:22:00 +0000</pubDate>
		<guid>http://www.gamedev.net/blog/909/entry-2254056-chroot-ing-in-windows-as-easy-as-a-b-c/</guid>
	</item>
	<item>
		<title><![CDATA[Bagging Some Property - Getting A Windows User's Picture Tile]]></title>
		<link>http://www.gamedev.net/blog/909/entry-2253987-bagging-some-property-getting-a-windows-users-picture-tile/</link>
		<category></category>
		<description><![CDATA[It doesn't sound like it should be so hard. I mean, the shell has managed to produce it every time you've logged on since Windows XP. <a href='http://msdn.microsoft.com/en-us/library/bb776892.aspx' class='bbc_url' title='External link' rel='nofollow external'>MSDN has a page</a> dedicated to user profiles that includes a section on where it is and how its treated. It details that a users picture lives in their temp directory, except for most times when it doesn't. It's not wrong in its description. The picture will turn up if you open the User Account control panel, but if you're trying to grab it programatically, asking the user to open Control Panel and all that or even worse, opening it from your own code and killing the window just as quick aren't fantastic solutions.<br /><br />If you’ve searched for this before or being otherwise snooping through the shell’s exported functions, you may have seen something called <a href='http://undoc.airesoft.co.uk/shell32.dll/SHGetUserPicturePath.php' class='bbc_url' title='External link' rel='nofollow external'>SHGetUserPicturePath</a> or its ex version <a href='http://undoc.airesoft.co.uk/shell32.dll/SHGetUserPicturePathEx.php' class='bbc_url' title='External link' rel='nofollow external'>SHGetUserPicturePathEx</a>. Just the sound of their names elicit sounds of joy, a joy that the long search is over. And it should be, except that it isn't. For one thing, up until a few weeks ago there was no public record of how to use them or what they do, at least not one picked up by Google. Now that’s been rectified (with the docs above) and given the MSDN page, 2+2 would suggest these are the functions called upon opening the control panel.<br /><br />Continue reading on <a href='http://blog.airesoft.co.uk/2012/01/bagging-some-property-getting-a-users-picture-tile/#shell' class='bbc_url' title='External link' rel='nofollow external'>Just Let It Flow</a>]]></description>
		<pubDate>Tue, 03 Jan 2012 18:18:00 +0000</pubDate>
		<guid>http://www.gamedev.net/blog/909/entry-2253987-bagging-some-property-getting-a-windows-users-picture-tile/</guid>
	</item>
	<item>
		<title>Detailing the Hookers – Underneath the Sheets</title>
		<link>http://www.gamedev.net/blog/909/entry-2250404-detailing-the-hookers-–-underneath-the-sheets/</link>
		<category></category>
		<description><![CDATA[We all need ideas. Whether you've just finished something, or are getting a little bit bored with your current project you can't help but let your mind drift to the next cool thing you'll create. Sometimes the ideas come thick and fast, other times they're like gold dust. When I'm in the second camp, and reading the various boards I read, I will quite happily steal other peoples. <br /><br />One such board is Sysinternals'. They do winternals, I do winternals, they have a suggestion section and I want ideas. It's a perfect fit. On a previous visit, one of the suggestions I found was for a program that could list active hooks. Given my previous excursions into user/win32k territory, it didn't seem like it'd be too hard. And apart from the digging around assembly listings for the structure offsets, it wasn't, and that was more time-intensive than difficult. At any rate, I am now the owner of 14 versions of win32k.sys' symbols. I don't even have 14 games on my computer!<br /><br />Rather than just dumping a download link and saying what it does (like I semi-did last time), I thought I'd deconstruct the hows and why's of the kernel side of the query. Needless to say, much of what follows is discussion of undocumented things. I am aware this makes Raymond Chen cry. Sorry fella.<br /><br />Continue reading on <a href='http://blog.airesoft.co.uk/2011/07/hookers-underneath-the-sheets/#find' class='bbc_url' title='External link' rel='nofollow external'>Just Let It Flow</a><br /><br />Apologies to BenS1, I didn't notice the comment on the previous blog entry. Looks like I went and did what you were after anyway <span rel='lightbox'><img class='bbc_img' src='http://public.gamedev.net/public/style_emoticons/default/smile.gif' class='bbc_emoticon' alt=':)' /></span>]]></description>
		<pubDate>Mon, 18 Jul 2011 06:13:00 +0000</pubDate>
		<guid>http://www.gamedev.net/blog/909/entry-2250404-detailing-the-hookers-–-underneath-the-sheets/</guid>
	</item>
</channel>
</rss>