Tuesday, March 31, 2015

What BIOS Updates?

For the past few days, I've been debugging an issue that causes one of the two more-or-less-identical NICs in a new server to fail with code 10 ("the device failed to start", which is just about as vague as you can get). Internet searching suggested that I should upgrade my BIOS. Fair enough.

The manufacturer of the BIOS in question is American Megatrends, who have a large section of their web site devoted to talking about how great their BIOS/UEFI ROMs are and then proceed to not let me download them. Links to the BIOS upgrade tool are all over the place, but it seems to be only a program that lets me do the burning - no actual replacement ROMs come in the ZIP file. (But it does give me a DOS version of the program, so I can flash my BIOS on DOS. If I had DOS. Or a BIOS ROM to flash.)

Further Internet searching ensued, and I found links to download a big ZIP of different ROMs, varying based on motherboard. (It's a Foxconn G[something or other]-K.) The only issue was that all those links pointed to pages on the American Megatrends site, all of which silently redirected me to their home page but kept the URL same-ish, just enough to confuse me for a moment.

I still have no idea how to actually update this BIOS.

Monday, March 30, 2015

FMod - Essential Help

Today in a short period of inactivity, I added SetContextHelp calls to the Essential Manipulator so it displays contextual help when that pane is active. That pretty much finishes that tool, so it's just testing from here to v2.5. Unless I choose to add a UI for some basic configuration options, which is an idea I've had for a while.

Oh, and I also added code to the dependency file AdaptVersion so that the InfoplaneInspector changes made for v2.5 will also apply to existing dependency files.

Sunday, March 29, 2015

FMod - Level Inspection Updates

A very important community member suggested some changes to Abiathar's Level Inspector and/or Resource Accountant. She noted that the Resource Accountant only includes point- or ammo-giving tiles and sprites in its tally of resource objects, not sprites. I'm not sure if she knows whether the Level Inspector is designed to make sure there aren't too many sprites in the level, but it doesn't actually export the sprite memory usage score that it uses to make the decision as to whether to produce a warning. Similar things go on with tile memory usage. So, I added a new type of information to the Level Inspector report: information, which is just the raw numbers that might be useful for debugging or finagling.

She also noted that the Resource Accountant counts sprites that have multiple categories of resources attached as multiple objects. Additionally, the King Boobus Tuber sprite in Keen Dreams was missing its 100K point value and the big eye item (also in Keen Dreams) was missing its 20K point value. Both these problems were corrected fairly easily.

While I was changing things, I made tileset switching under Simultaneous Tileset more intuitive. If the mouse is over the tileset, the 1-3 digit keys switch the tileset, but if the mouse is over the level, those keys control plane state (7-9 can be used to switch the tileset). Previously, it was always 7-9 that had to be used in ST mode.

I finally found a good color for the under-mouse tile highlight: the same orange as the default links color, but at half-transparency.

Saturday, March 28, 2015

FMod - Essential Manipulator

Today, I actually wrote the code for the new Essential Manipulator tool that will be the main visible focus of the v2.5 update.

Its goal is to be a one-stop tool for casual Abiathar use, rolling up the most useful aspects of the Copier, Paster, and Tile Placer. Right-dragging copies a rectangular region, clicking or left-dragging pastes the stamp into the level. (It's the same clipboard as the Copier, Paster, and Palette Copier use. I took advantage of the ClipboardChangeNotifier object and its event to make both the Paster and the EM refresh their stamp when the Palette Copier is used.)

Writing the tool was fairly easy, but debugging turned out to be a formidable challenge. The switcheroo it has to pull on the drag translator seems to have some unusual effects on what clicks it receives and when. I had to slightly adjust the order in which the translator does its bookkeeping so that strange stuff doesn't happen. This was made even more complicated by the possibility of chording - holding both left and right, which no tool will ever use but causes extra events to be raised.

I noticed that the "cut" mode of the Copier doesn't push an IUndoableAction onto the undo stack, which means that there's a possibility of undo corruption depending on temporally adjacent modifications of the region. This was fixed, though I did seriously consider removing "cut" mode. (Right-clicking with the Paster nulls the stamp area as well.)

I should do some more testing of the new UseDrag configuration option, but I think most of the major changes for v2.5 are done. I still have to find a nice color for the under-mouse highlight though...

Friday, March 27, 2015

FMod - Mouse Position Highlight Refactor

In continuation of my Abiathar tool refactoring project, I folded the implementation of drawing a highlight on the tile under the mouse into the Abiathar core.

This required a bit of caution so as to not create an unnecessary slowdown when a user doesn't want/like the TOM-style single-tile highlight and turns it off in the config file (which I do, and so it's off by default). The renderer now paints the under-mouse highlight after all the planes. When the mouse is moved, the mouse-over routine makes sure no tool's reaction caused a repaint so that the screen isn't unnecessarily repainted. While I was at it, I sped up the render plane iterator and ripped out the ability of planes to say that they don't want to be stretched to fit the zoom level. (I have no idea why I or anybody else would ever want to do that, and extensions that really have to can hook the paint event.)

I added an API command under ViewState to suppress the under-mouse highlight, since it now by default happens everywhere if the user enables it. Clearly, this isn't great for tools like the Paster that do their own at-mouse rendering. I am, however, still working on finding a good color for the highlight.

A minor tweak to the drag translation implementation was made to allow for tools to change their mind about their mode if they started with click-at-each step translation. I plan to take advantage of this when writing the Essential Manipulator.

This version will be called v2.5 rather than v2.4.2 as previously guessed.

Thursday, March 26, 2015

FMod - Tool Improvements

I made quite a few improvements to Abiathar today.

First, I fixed the problem I created with the Paster yesterday. The TileUndo method responsible for actually performing the undo now performs the tile changes in an order reversed from the one in which they were registered. Undoing a smear paste no longer results in fragments of the clipboard strewn across the area. I also optimized the nested for loop that's activated when pasting, but that turned out to not be as important as using single-tile invalidations rather than whole-plane. After seeing how much faster the individual graphics updates are than nuking the whole plane, I changed all the mass-update tools to use individual updates.

I used the new drag translation API to add click-and-drag support to the Rectangle Filler and Circle Filler. It was so easy! Refactoring is definitely a good thing.

The Path Plotter had been in need of some attention for a while. It was impossible to see the actual points that had been set as turn locations, which made the visually intrusive grid necessary to accurately use the tool. So, I made use of the fairly old selection plane management functionality in StandardAbiatharLevelTool to create single-tile selection highlights for the Path Plotter. It's now much easier to see where you've put the turning points.

I implemented the drag translation API for tile tools and have switched the Tile Picker over to it.

Wednesday, March 25, 2015

FMod - Refactored Drag

Yesterday and today, I worked on moving the click-and-drag functionality (which is kind of a kludge) out of all the tools and into the Abiathar core. Previously, each tool had to have its own code to identify a click-and-drag because Abiathar only delivered click and mouse-move notifications. My goal is to have all tools support click-and-drag for region selection in addition to click-one-corner-then-the-other and for this behavior to be configurable with a single Boolean option.

This effort resulted in the creation of the SetClickDragTranslationMode API method, which only has an effect if the UseDrag config file option is set. Depending on the active tool's translation mode, Abiathar will deliver a click message at the beginning and end of a drag, or at each tile dragged across. Tools still receive the InLevelMouseMove notifications, but I'm destroying the unwieldy drag detection code from those methods, leaving undo action accumulation. (I might refactor that up into AbiatharStandardLevelTool so I don't have to repeat myself.)

The Freeform Tile Placer was the first to take advantage of the API; it uses click-at-each-step translation. Coding the use of this feature is really nice - it's just a one-line SetClickDragTranslationMode call, then process each "click" as normal. Since the FFTP is now able to be either a one-tile-at-a-time tweaker or a pencil, the Tile Tweaker is redundant and is now gone. (That was kind of a symbolic experience for me - the Tile Tweaker was the first tool written for Abiathar. It's like I'm completely reforming the system!)

The Linker was the first test of the click-at-drag-endpoints mode. There were some bugs with that mode, but they were fixed fairly easily after stepping through what was going on. A single API call added drag functionality to an existing tool; the Linker didn't have it before!

The Paster has been reworked to use click-at-each-step translation, but there is a rather serious problem with my undo action accumulation, which I will investigate tomorrow.

Monday, March 23, 2015

Batch Script Surprise: Default Call Mode is Chain

A few weeks ago, I was experiencing a very strange phenomenon that caused my batch file to terminate unexpectedly immediately after running a CMD file (which is another extension for a batch file). After all kinds of debugging and Internet searching, I discovered something very... interesting:

Batch files, by default, exit after calling another batch file.

I was expecting my batch file to resume where it was after the other batch file finished executing, like how subroutines work in every language ever*. However, the default mode is to chain rather than call; it's as if your batch file's entire text in memory is replaced with the text of the other batch file. (Not how it works, but how I think of it.)

If you want the behavior I (and probably you also) expect, you should place the simple word "call" before the name of the batch file (leave the arguments to the batch file just the same), like so:

call copype.cmd x64 temp\

*QuickBASIC's "CHAIN" command transferred control to another program, did some memory transfer business that I still don't understand, and terminated the original program.

Sunday, March 22, 2015

FMod - Crash Reports

I noticed that Abiathar's crash logs were always empty (zero-byte) files despite there being code to write information about the deadly exception to the file. Apparently, I had forgotten to issue a Close or Flush command to the StreamWriter responsible for the error report file. So, all its buffered data was lost when I instructed the program to terminate after displaying the crash dialog. The problem has been fixed, and the report files now are named with the date and time, like the dependency file loading failure reports.

Saturday, March 21, 2015

FMod - UI Finagling

I continued improving Abiathar for what will be either the v2.4.2 or the v2.5 update, depending on how much more I decide to change.

First, I attacked the issue that caused rendering planes depending on the mouse position to not update when the user moved the view window using the arrows. After adjusting the level view state, Abiathar now raises the mouse move event with a flag forcing the message to be sent to the active tool. There is also a new API command called RefreshMouse() that the tools now use to put the selection rectangle or the paste preview overlay in the right spot when they start. The paste preview overlay no longer waits for the user to move the mouse before putting its overlay in the right spot.

I found that the region defining/selection code would not start a selection in the upper-left corner because it treated the (0, 0) point to mean that the selection had not yet started. I fixed that by changing the null value to (-1, -1), which is never a valid point in the level. On second thought, though, using a Nullable(Of Point) value probably would have been a better idea.

I started working on a new tool, the Essential Manipulator, that will roll together the functionality of the Freeform Tile Placer, Copier, and Paster. It won't have all the special features of those three tools; it's intended to be a one-stop for beginners. I'm also seriously considering removing the Tile Tweaker and renaming the Freeform Tile Placer to just Tile Placer. If that happens, I'll add a config option to choose whether tools will allow dragging.

The tool loading and selection routines were changed to allow for easier access to customized default tools (like the Essential Manipulator may become). Every tool now chooses a hotkey that will call it if it is not the default, but if it is set to be the default, its preferences will be overriden with the simple Escape key. It will show "Esc" as the shortcut key string on its menu item and it will be pushed to the top. Now, both the Tile Tweaker and the Tile Picker report a hotkey of "\" (the backslash), but Abiathar's default configuration (making those the default for levels and tile palettes, respectively) makes their key Escape. Previously, only the Freeform Tile Placer would change hotkeys depending on whether it was default, trading with Tile Tweaker. Everybody gets the special hotkey switch treatment now!

Friday, March 20, 2015

FMod - Render Plane Improvements

Today, I implemented the ephemeral rendering plane idea that I had yesterday. The converted planes (level selection rectangle, paste preview, tileset selection rectangle, and tile crosshairs) no longer store their image; they re-render it every time. Since the main renderer doesn't have access to their individual bitmaps, it passes most of the rendering environment to the EphemeralRender routine. These planes' classes are now responsible for handling their own zoom level and offset.

I did notice some speed improvements, and I'm fairly certain memory usage has been decreased. (In fact, it should have theoretically gone down 25%).

I also added a tiny feature to the Palette Copier: it hides the selected-tile crosshairs while it is active. This makes the selection a little nicer visually, and it removes clutter - the single "selected tile" doesn't matter much when you're selecting a whole swath of them.

Thursday, March 19, 2015

FMod - Ephemeral Rendering?

I had an idea that could possibly decrease the memory footprint of Abiathar.

Currently, every rendering "plane" is persisted as a bitmap in the level's view state. There are currently eight (!) planes for each level: background, foreground, non-link infoplane, linkable infoplane, links, tile properties, selection rectangle, and paste preview. Those last two seem a bit wasteful to keep around all the time, especially since they can be rendered so easily.

I'm seriously considering implementing a different type of render plane that doesn't keep its contents in a bitmap. Rather, when it is instructed to render its contents, it will receive a Graphics object and draw directly on it. In fact, this might be even faster because GDI won't have to BitBlt an entire bitmap - one plane is literally just a rectangle and the other is a small smattering of tiles. Paste preview could be optimized by just storing the image of the blot and rendering it in the appropriate place rather than putting it on a mostly-empty bitmap and then blending that.

I'll call this mechanism "ephemeral rendering planes."

Wednesday, March 18, 2015

Windows 10 Annoyance: Inaccessibility of Control Panel

I really like Windows 10 and the improvements they've been making to the Metro-style (oh, excuse me, modern) apps. In the most recent build, they've overhauled the Settings app, making it look kind of like a modern version of Control Panel.

The problem? I can't find the real Control Panel, the desktop/old one. The "Open Control Panel" button in the Explorer Ribbon when viewing This PC has been replaced with "Open Settings", which launches the Metro Control Panel. Also, no links to Control Panel appear anywhere in Explorer, at least as far as I've found.

This is fairly annoying for me; I find myself needing to poke around in Control Panel about once a week. The Settings app just doesn't cut it for system administration.

Tuesday, March 17, 2015

Windows 10 Bug: Unusable Start Menu

It seems that the Windows shell team is a little out of practice when it comes to making Start menus.

On the latest build of Windows 10, there's a chance for any given installation that the Start menu will just not work at all. That is, pressing it does nothing; you can't get the list of apps. The Search box works fine, and it seems that if the Start button bug is happening then the Search box will refuse to go away, even if you set its mode to Disabled.

On a previous build, the Start menu would sometimes be two lines tall, which made it very difficult to see your apps.

I have one Win10 computer that's fine, and one that won't produce a working Start menu no matter what I do. (Perhaps a reinstall is necessary?)

Monday, March 16, 2015

FMod - Bad Bugs

Some rather severe bugs were reported to me today concerning Abiathar. First, the Flood Filler was reported as causing crashes when filling large areas, but it actually showed the bug whenever a fill hit the left edge of the level. That caused it to try to store a negative value in a UShort (due to the way it remembers where it's been), which obviously resulted in an overflow. This was easily fixed by changing the order of checks before trying to fill a tile.

Second and more importantly, Dreams levels were exhibiting an interesting problem: a few tiles at the end of the level would get set to zero upon saving. It turns out there was a bug in the FleexCore2 saving code that caused an off-by-two value to be written as the compressed length. That cut off the description of the last RLEW run of tiles for each plane, resulting a slightly truncated level, typically only affecting the "edge of map" markers.

Not reported but extremely critical was the complete deletion of level 0 upon loading a Galaxy set! The adjustments I had made to FleexCore2 to accommodate Tharify's lack of level 0 (and remain compatible with the old InstantCarma that placed the first level header at offset zero) had caused legitimate levels to be detected as garbage and removed. This was fixed with a quickness.

While I was at it, I also fixed the UI glitch of the updates-available window appearing behind the splash "loading" screen. These changes were released as v2.4.1.

Sunday, March 15, 2015

Windows 10 Updates Differently

Windows Update works in Windows 10 (or "Windows Technical Preview" as it calls/called itself internally), and you can get a few updates designed for it. However, there's a significantly different way that Windows 10 receives the big changes.

Windows 10 will actually redownload and reinstall itself if left unattended for half an hour or so. You can't trigger the acquisition or installation of a new build with Windows Update; you have to let it use its own special channel. (Of course, you could download the new ISO from the Windows Insider web site if you want to control exactly when it happens.)

Saturday, March 14, 2015

Keen Day 2015

Yesterday, I made some major updates to Tharify in addition to writing the AbiatharOS build script. The /levelsonly switch has been added; this is necessary for games that have Vorticons-style levels but other-style graphics. It causes only level files to be generated; the user must supply the graphics and create the ADEPS manually. That ADEPS's filename must then be supplied when detharifying even if /conf is used to load the settings from a configuration file.

Last night as I was falling asleep, I had a great idea for a simple yet immensely useful Abiathar feature, which I implemented this morning. I call this feature "mini-palettes." It adds a small repository of 10 tiles for each plane that can be accessed by pressing Alt+Up or Alt+Down. Doing so produces a little floating panel above the current plane's selected tile image, with a 3x3 grid plus one. The extra tile, slot 0, is automatically set to the previously selected tile when a tool (e.g. the Tile Tweaker) changes the selected tile. (I call it the history tile.) Each of the tiles in the mini-palette has a number assigned to it, arranged like the keys on the numeric keypad (as opposed to the number keys on a phone).

The mini-palette pop-up has two modes, storing (Alt+Up) and retrieving (Alt+Down). In storing mode, mini-palette tiles can be clicked to replace them with the main selected tile or right-clicked to replace them with the history tile. In retrieving mode, tiles can be clicked to make them the main selected tile.

While the pop-up is showing, the Left and Right arrow keys show the mini-palette for the plane to the left or right, as appropriate. Up and Down switch modes, updating the text appropriately. This feature addition was bundled with v2.4.

I released Abiathar v2.4, AbiatharOS, and Tharify on the PCKF at different times throughout the day. There have also been some interesting releases by other people, which I will check out more thoroughly tomorrow. And, I expect another release or two when it's day over in Australia/NZ. An exciting Keen Day indeed!

Friday, March 13, 2015

FMod - Automated OS Build

Since the legality of redistributing Windows PE and the Windows ADK is questionable (despite it being free for anyone to download), I decided to spend a bit of time today and create a PE build script for AbiatharOS. That way, anybody can download Windows PE from Microsoft as they like, then run my script to put the ADK on autopilot, and out pops an ISO file and a WIM file.

This turned out to not be so hard. I just made a batch file alongside folder called "patch" that contains all the files to be replaced or added. The batch script does the following:

  • Sets up a PE build environment (copype)
  • Mounts the resulting WIM image (dism)
  • Adds the WMI and NetFX WinPE packages (dism)
  • Adds ImageX to the image for AbiatharOS installation (copy)
  • Sets the NTFS owner of WinPE's System32 directory to Administrators (takeown)
  • Grants the user the rights to modify the WinPE system files (icacls)
  • Adds/replaces the appropriate files from the patch directory (xcopy)
  • Unmounts the WIM image (dism)
  • Burns the WIM and other resources into an ISO (oscdimg)
  • Moves the WIM file out of the PE build environment (move)
  • Removes the PE build environment (rmdir)
I should test it on other computers before release, but it works perfectly on mine. All I have to do is release a ZIP containing compile.bat and the patch directory; all the real assembly happens on consumer machines.

Thursday, March 12, 2015

Tharify - Essentially Done

Today during a study hall, I hammered out the rest of Tharify: the command-line interface and the detharification routine. With the command interface in place, I actually got to test the tharification that I finished writing yesterday. It worked almost perfectly, except for these fairly apparent bugs:

  • I had forgotten to actually add the converted GalaxyLevel to the GalaxyLevels collection. This resulted in a blank GameMaps and a crash when opening with Abiathar.
  • FleexCore2's Vorticons level loader was completely broken. (I had ported it, more or less, from the original FleexCore, but apparently never tested.) At first, loading any file resulted in a zero-by-zero level because I never set the seek needle back to the start of the stream after decompressing. After fixing that, I found that the plane size was miscalculated, resulting in all sprites being shifted over.
  • The adjustments I made a while ago to the GalaxyLevels loader (allowing a level's header to start at zero in the GameMaps) caused the " FLEEXY " signature to be interpreted as a level header when there is no level 0. 
  • The Keen sprite/icon rendered as a blank tile because of an off-by-one error in the sprite to infoplane tileset conversion code.
I fixed all of them fairly easily, except the third. I added some special cases to the Galaxy levels loader to heuristically detect whether there is a real level at offset zero when the map header file has a zero value for the first entry.

Keen 1, tharified, and opened in Abiathar
The first background tile renders as the first actual tile because Abiathar always renders the first foreground tile as fully transparent. When tile zero is actually present, the background tile representation of it shows through. The second background tile says "not a link" and is used to suppress absolute-to-relative link correction.

When running the first Tharify command, the /outconf switch can be used to save the configuration to a small file for easy detharifying or retharifying. The presence of the /conf switch in either mode (/thar or /vort) causes the operation parameters to be loaded from the file rather that sought on the command line.

I'll do some more testing, of course, but Tharify is pretty much ready for this Keen Day. (Two days away!)

Wednesday, March 11, 2015

Tharify

Keen Day 2015 is coming up with a quickness, and I don't have anything particularly groundbreaking coming up. However, I do have two fun little things related to Abiathar that might be interesting to a few people, one of which is AbiatharOS.

The other is Tharify. My plan for Tharify is to create a conversion process from Vorticons to Galaxy and back so that Abiathar can be used for Vorticons editing. This probably won't be particularly useful - Mindbelt is a great Vorticons editor and has the advantage of actually being designed for that engine/style - but it's a fun small project for me. (To be honest, I'm really doing it to see if I can.) I've only had two coding sessions on it so far, but it's about halfway done already.

Currently, it can convert the Vorticons EGA resources into KeenGraph-style tile sheet bitmaps. The Vorticons tiles become the foreground plane; sprites are squished into infoplane icons. The background only has two tiles: a blank black square and a "not a link" text. That special tile signals the Galaxy-to-Vorticons level converter to not perform link adjustment on it. (Vorticons uses relative coordinates for switch links; Galaxy uses absolute.)

I'm still working on the command-line argument processing. Once there's a working implementation of that, I can actually test all this code I've been blindly writing.

Tuesday, March 10, 2015

Calling VoIP Phones on the LAN with Ekiga

I was recently assigned the task of getting a Windows computer to connect to a phone over the network so that the audio received from the phone can be included in a livestream broadcast.

I looked around in the documentation for the phone system that's already on the network, but my organization doesn't seem to have bought a desktop client for our SIP system. After a good deal of research and scratching my head, I discovered Ekiga.

Ekiga is an open-source SIP/VoIP client that works on all manner of platforms. More importantly, it supports dialing by IP address rather than the strange SIP address thing that I still don't understand. Simply prefix the phone's IP with "sip:" in the call destination field and go! The phone will ring and establish a full connection after a person answers.

Monday, March 9, 2015

Launching All the Attacks with Armitage

Kali Linux includes a GUI for Metasploit called Armitage. In addition to being a front-end and convenient GUI, Armitage offers automation of some common processes and some extra displays and features.

For example, Armitage has an option called Hail Mary. Upon activation, it will launch every attack it knows about against every host you've added to your workspace. This is obviously not stealthy at all, but in my opinion it's a great way to check if your systems are vulnerable to anything.

After activation, you'll see each attack as it's sent, and then after 30 seconds you'll see a list of shells successfully opened. If there's even one, some service running on the machine, if not the machine itself, is easily compromised.

Sunday, March 8, 2015

Testing Hard Drives by Paging

I recently got a drive of uncertain quality that I needed to test. I had lots of time and also needed to test for infant mortality, so I decided to actually use it as a drive for a while. However, I don't really have anything that I want to keep on a separate drive, and I can't keep this drive forever.

So, I decided to move my system's page file to the tested drive. This can be done easily by opening the Virtual Memory dialog (under System Properties → Performance Options), unchecking "automatically manage paging file size for all drives", and configuring Windows to have no paging file on the OS drive but a system-managed paging file on the tested drive.

When the testing is complete, the pagefile can be moved back onto the main drive using the same dialog. If the drive dies - as it will pretty quickly if it's bad - then the compute can be booted into Safe Mode to move the pagefile back onto the main disk. Reboots are required after changing virtual memory settings.

Saturday, March 7, 2015

FMod - Buffering Optimization?

I remembered that Abiathar switched to double-buffered graphics back even before it had the notion of a "plane" (when every render pass was done in the Paint method of that panel). I thought that doing that might no longer be necessary since it no longer has to rerender every plane to update the screen, so I added a configuration option to disable double-bufferedness.

It turns out that double buffering is still necessary; turning it off results in horrible flickering when placing a tile or scrolling, even on my powerful machine. However, most user-initiated changes - tile placement - shouldn't require a full rerender. So, I want to add a way for tools to request a repaint of only a specific region. That way, double buffering can be temporarily turned off (automatically) and the tile placed without flickering, fast. I'll work on this soon; it could be a big win for people with slower computers.

Friday, March 6, 2015

When Clients Don't See the WSUS Server

Today I got to debug a problem that caused several Windows machines of varying version to not register in, connect with, or acknowledge the existence of the WSUS server despite Group Policy's Resultant Set of Policy wizard telling me that all the policies are configured correctly. After some digging in the registry, I discovered that one client (the one I was doing all the diagnostics on) didn't have any mention of the WSUS configuration in the Policies registry key.

Somehow, Group Policy got faked out by the WSUS administrative template and didn't update the appropriate registry settings even after gpupdate /force or a reboot. The solution for the one client was to rename/remove the HKLM/Software/Microsoft/Windows/CurrentVersion/Policies key and, run gpupdate, and then reboot the machine. That fix is pretty inconvenient, and I'm hoping I don't have to make a GP startup script to perform it. Further investigation will be performed, but this is a reasonable solution if you have only a few exhibiting the problem. (I have around 40.)

Thursday, March 5, 2015

All Network Card MAC Addresses Can Be Changed

In Device Manager, not all network adapters add the "Network Address" field to the setting list in the Advanced tab. However, Windows can force any network adapter to use a given MAC address (though some cards require that it start with D2, D4, D8, or DE).

The second method of this WikiHow article does the job quite well. You'll need to reboot, but it does indeed change the adapter's physical address.

Wednesday, March 4, 2015

WSUS Approval Deadlines

WSUS has this feature called "deadlines" in the approval dialog, and if you don't enable it, your updates might never be installed. That's because users can just not hit the button to start the installation (why would I want to update and restart when I'm in the middle of working?). The deadline causes the clients to start installing the update at that time no matter what the user says. Similar things can be done with the Group Policy setting that schedules update installation.

Tuesday, March 3, 2015

Using Windows Parental Controls (Family Safety) on a Domain

A while back, I was setting up a test domain at home and also wanted to mess with the Windows parental controls. I discovered that being domain-joined removes the Family Safety option from the Control Panel, and was severely disappointed.

Today, I discovered that it is possible to use Family Safety on a domain, and without any crazy registry editing or profile folder shuffling. There's just a Group Policy setting for it:
  • Computer Configuration
    • Windows Settings
      • Windows Components
        • Parental Controls
          • "Make Parental Controls control panel visible on a Domain"
Switch that to Enabled, force a group policy refresh on the client with gpupdate (may require logoff/logon cycle), and control parentally on a domain!