<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Steading System Software</title>
    <description>Steading System Software: Independent System Software Consultants</description>
    <link>http://www.steadingsoftware.com/</link>
    <atom:link href="http://www.steadingsoftware.com/feed.xml" rel="self" type="application/rss+xml" />
    <pubDate>2017-04-16 13:58:06 +0100</pubDate>
    <lastBuildDate>2017-04-16 13:58:06 +0100</lastBuildDate>
    <generator>Jekyll v</generator>
    
      <item>
        <title>More Website-ery</title>
        <description>&lt;p&gt;This post marks three changes:&lt;/p&gt;

&lt;p&gt;Firstly, the website is now hosted by &lt;a href=&quot;http://www.zen.co.uk&quot;&gt;Zen&lt;/a&gt;.  We started by using Zen just for ADSL and as we became more and more convinced by their customer service and less convinced by the support from others we moved first our land lines, then our backup, then our mobile phones and finally out website.&lt;/p&gt;

&lt;p&gt;Next, he website is built (still using Jekyll) on a Windows 10 box, running the beta Linux subsystem that was introduced with Anniversary Edition&lt;/p&gt;

&lt;p&gt;Finally, the source for the website is saved at &lt;a href=&quot;https://github.com/rodwiddowson/SSSWebsite&quot;&gt;Github&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>2017-04-16 14:43:00 +0100</pubDate>
        <link>http://www.steadingsoftware.com/2017/04/16/more-websitery/</link>
        <guid isPermaLink="true">http://www.steadingsoftware.com/2017/04/16/more-websitery/</guid>
        
        
      </item>
    
      <item>
        <title>Welcome to the new style Website</title>
        <description>&lt;p&gt;When we set up Steading System Software (over 10 years ago) we asked &lt;a href=&quot;http://www.sitesbyfee.co.uk&quot;&gt;Sites by Fee&lt;/a&gt; to build us a simple web site.  This was done and it served us well.&lt;/p&gt;

&lt;p&gt;It was a creation of its time, running on some scripted backend, requiring a database and all sorts of stuff like that.  All that technology was, needless to say, far more than we needed.  But in those days your options were content manahement systems or raw html.  Given that we wanted something with a certain amount of style we went for CMS.&lt;/p&gt;

&lt;p&gt;Of course over time of course maintaing a database and a scripting language and a gargantual script written in that language because impossible.  &lt;a href=&quot;http://dreamhost.com/&quot;&gt;Dreamhost&lt;/a&gt; (who hosted us) started to offer scripting languages built in. but of course the CMS hadn’t been ported and things deteriorated.&lt;/p&gt;

&lt;p&gt;About 2 years ago my long time colleague &lt;a href=&quot;http://www.iay.org.uk&quot;&gt;Ian Young&lt;/a&gt; who is always my go to guy for having an eye on the correct technology pointed me at YAML and JEKYLL.  He then provided us with excellent support in moving our cruft old CMS site back to proper static content.  &lt;/p&gt;

&lt;p&gt;Which is where we are now.  Static content Rocks! I no longer need worry about maintaing whole rafts of code I didn’t need, and I don’t have to worry about security.  Somone else manages the Apache that this static data is served from.&lt;/p&gt;

&lt;p&gt;Thanks Ian.&lt;/p&gt;
</description>
        <pubDate>2017-04-15 17:56:00 +0100</pubDate>
        <link>http://www.steadingsoftware.com/2017/04/15/new-style-website/</link>
        <guid isPermaLink="true">http://www.steadingsoftware.com/2017/04/15/new-style-website/</guid>
        
        
      </item>
    
      <item>
        <title>Logo for Kernel Filter drivers</title>
        <description>&lt;p&gt;It looks likely that Microsoft will be introducing a logo program for filesystem and registry filters.
One can argue about the value of these programs especially for specific applications.  Whilst it is
easy to see the importance of logoing a full commodity offering like an AV filter it seems harder to apply
to specialist filters.&lt;/p&gt;

&lt;p&gt;One way or another, if this program is announced it will be important to make your filters conformant.
Steading System Software have been working with these tests for many years and are well placed to help
you with this.&lt;/p&gt;
</description>
        <pubDate>2014-08-08 16:54:44 +0100</pubDate>
        <link>http://www.steadingsoftware.com/2014/08/08/logo-for-kernel-filter-drivers/</link>
        <guid isPermaLink="true">http://www.steadingsoftware.com/2014/08/08/logo-for-kernel-filter-drivers/</guid>
        
        
      </item>
    
      <item>
        <title>Why we have to do EduId</title>
        <description>&lt;p&gt;As most of you know, as well as doing Windows file systems I am also a
Shibboleth developer.  This post is provoked by Nicole’s excellent post.&lt;/p&gt;

&lt;p&gt;As background, when I first got involved with Shibboleth it appear to both
myself and Ian that Discovery was going to need some work, however discovery
has always been if not the unloved, certainly the neglected child. This is
really due to two things:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Security people do not do good GUIs — as for myself, most of my background is in developing kernel-mode file systems.&lt;/li&gt;
  &lt;li&gt;Given a choice of making a GUI better of fixing real security issues, which are you going to choose.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is why I was delighted when the Cardiff stuff on SP usability came out. At the same time JANET (who run the UK Federation on behalf of JISC) commissioned some work to improve the UK Federation WAYF.&lt;/p&gt;

&lt;p&gt;At last Discovery is getting the attention I have long thought it deserved and focus is being brought by those with appropriate skills. I cannot emphasize how much I welcome this.&lt;/p&gt;

&lt;p&gt;So what is EduId? I cannot speak authoritatively as to what it exactly is, but the way I think of it is as a standard logo that people can look for on a web page. When they see that they can tell that if they click on it they will get to a standardised discovery and at the end their IdP.&lt;/p&gt;

&lt;p&gt;A weak, but compelling analogy is with the VISA logo. When you see that sign on the door of a shop you know that you will be embarking on a purchasing experience you understand. You may not get there since your credit might be bad, or there may be geographical limitations on your card.&lt;/p&gt;

&lt;p&gt;Similarly if you see the EduId logo you will know that the next stage it to enter your IdP. I believe that having such a logo will definitely help the login experience. No more hunting for “Shibboleth Login” or “SAML Login” or “Login” or whatever. The Cardiff study showed us –– the experience right now is appalling, and we just have to make it better.
 
Not everyone is enthused however, and this post is my attempt to answer some of the criticisms Comments I have heard are:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;What’s wrong with Login?&lt;/strong&gt; Well, it’s an overused word to start with. “Log on to the BBC website” they say when they mean “Browse to”. Also Login is heavily used by people with local logins. Of course these people should be doing discovery as well, but that’s another story.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;It doesn’t solve the issue outside Education.&lt;/strong&gt; True, but Education is where the issue is and not solving it here is like saying that you are not going to search for peace in because it doesn’t solve world peace.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;It doesn’t solve the issue outside Education and may make it worse when the rest of world starts having this issue.&lt;/strong&gt; I have a sneaking suspicion that this might be the case, but
    &lt;ol&gt;
      &lt;li&gt;It is not obvious to me that the issue outside education is technical, rather if there is one, it’s a business issue. Either the Commericals IdPs care about owning your identity in which case they will pull every trick they can to make sure that they are the only listed IdP (in which case education can go whistle) or they don’t in which case they do not have a problem or they can align with eduID&lt;/li&gt;
      &lt;li&gt;I think the level of brokenness we currently have trumps any potential for future brokenness.&lt;/li&gt;
      &lt;li&gt;It is not obvious to me that logo need not lead to commercial IdPs. After all (to return to my analogy) if I see a VISA logo I might well decide to try my master card (or even my Amex).&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;The institution is the brand, not eduID.&lt;/strong&gt; Well sort of. To go back to the VISA analogy, I follow the VISA sign and that is neutral to the bank that issued my card. The protocol that goes on afterwards is specific to the bank. This is however pushing the analogy too far. Yes, the important brand is the institution, but without ending up as Nascar pages –– which will really mean the huge institutional IdPs and no one else –– we need something.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Of course what we really want to do is to reclaim the word login. But I fear that that boat has sailed.&lt;/p&gt;

&lt;p&gt;As a final note.  This website isn’t setup to do blogs very well, I’ll be
fixing that, but meantime you have any comments, feel free to contact me at
rdw at steadingsoftware dot com.&lt;/p&gt;
</description>
        <pubDate>2014-08-03 14:13:13 +0100</pubDate>
        <link>http://www.steadingsoftware.com/2014/08/03/why-we-have-to-do-eduid/</link>
        <guid isPermaLink="true">http://www.steadingsoftware.com/2014/08/03/why-we-have-to-do-eduid/</guid>
        
        
      </item>
    
      <item>
        <title>Testing at the edge</title>
        <description>&lt;p&gt;Hints and tips for exploring the corners of your Windows FSD or File System filter.&lt;/p&gt;

&lt;p&gt;Several people have recently asked me about testing “into the corners of the
file system”, and this article is an attempt to point out some of the darker
corners that you may want to look into while testing file systems and file
system drivers.&lt;/p&gt;

&lt;p&gt;Often a change to a popular application or filter will suddenly cause grief on
a hitherto stable filter; sometimes an API will suddenly become popular, and
occasionally you will find someone pushing the edge of your design envelope.
In any case it is always better to head this off in the lab.&lt;/p&gt;

&lt;p&gt;So here is my top 10 list of things to think about when testing (and indeed
when designing) an FSD or a file system filter. Not all of them will apply to
you, but some of them will.&lt;/p&gt;

&lt;h3 id=&quot;test-at-the-native-api-as-well-at-win32&quot;&gt;1. Test at the Native API as well at Win32.&lt;/h3&gt;

&lt;p&gt;During early development I find it best to test at the native API – that way
you get a one to one correspondence between operations that you send and IRPs
that you see. I cannot speak too highly of Ladislav Zezula’s FileTest utility
(available at OsrOnline and at Ladislav’s own site). This it exactly what you
need to get going. As an added bonus the source is available so you can add
calls for anything your product needs (for instance driver-specific ioctls and
fsctls).&lt;/p&gt;

&lt;p&gt;Once you have your driver more or less working you will want to write
application level tests. Whether these tests are written at the Native API
level (NtCreateFile, and so on) or the Win32 API level (CreateFile) will
probably depend on whether the test is being written by a driver developer or
not.&lt;/p&gt;

&lt;p&gt;If you write tests to the Win32 API you will be testing a subset of the calls
which your filesystem or filter can see, but you will be testing using the
paradigms used by a majority of the applications.&lt;/p&gt;

&lt;p&gt;If you write tests at the Native API level you will be able to test the entire
breadth of the API (and it is broad - just consider, for instance, the
different ways to rename a file). This can be particularly important when
testing capabilities which are not widely available when you test but suddenly
acquire a Win32 API.&lt;/p&gt;

&lt;p&gt;When testing against the Native API, you should be aware that the behaviours
are not documented, and may not be what you expect, so always test against a
reference implementation (usually NTFS) as well.&lt;/p&gt;

&lt;p&gt;No matter how you test, I urge that you test using both APIs with the balance
between the two being driven by the needs of your specific product.&lt;/p&gt;

&lt;h2 id=&quot;streams-dispositions-and-delete-on-close&quot;&gt;2. Streams, Dispositions and Delete on Close&lt;/h2&gt;

&lt;p&gt;If your filter or file system handles streams (and most filters need to) you
may need to make yourself aware of the ways in which the presence of a stream
in a file name presented for create processing affects the operation of an
FSD.&lt;/p&gt;

&lt;p&gt;I am not going to discuss the precise semantics; they are not documented and
hence may change. My experience is that although the behaviour is usually what
you might expect after some thought about the problems, it is often not
immediately intuitive. This is because the API doesn’t support streams as
first class objects and so the precise semantics have had to be subject to
best-guess approximations.&lt;/p&gt;

&lt;p&gt;I recommend that you perform the nature study appropriate to your driver and
then test as seems fit but here are few places to start thinking about.&lt;/p&gt;

&lt;p&gt;An open SUPERCEDE to a file is impacted by the file sharing constraints on all
opens to all streams. Similarly, OVERWRITE, OVERWRITE_IF and delete on close
can have wider impact that just the specified file.&lt;/p&gt;

&lt;p&gt;It is my experience that a filter just has to adopt a pessimistic view in such
situations (if a bad thing might happen, assume that it will). FSDs which seek
to emulate the streams behaviour of NTFS have no other option than to test
every single possible combination and emulate that.&lt;/p&gt;

&lt;h2 id=&quot;iocancelcreate--stack-based-file-objects&quot;&gt;3. IoCancelCreate &amp;amp; Stack based file objects&lt;/h2&gt;

&lt;p&gt;These are well described elsewhere (see for instance here). In general,
filters should be very careful about using the file objects that they get
given during create.&lt;/p&gt;

&lt;p&gt;Don’t do reads and writes using them.&lt;/p&gt;

&lt;p&gt;Before you post an operation requiring a file object to another thread or
borrow a file object for any purpose which will outlast the call frame you are
in, ensure that it is not stack based.&lt;/p&gt;

&lt;p&gt;You should note that, contrary to what may have been stated elsewhere, it is
still possible to be given stack based file objects in Vista.&lt;/p&gt;

&lt;h2 id=&quot;redirector-behaviour&quot;&gt;4. Redirector behaviour&lt;/h2&gt;

&lt;p&gt;Because the API is the same, it is tempting to assume that filtering a
redirector will be more or less the same as filtering a local file system.
This topic is worthy of an article of its own, but for now here are some items
to ponder:&lt;/p&gt;

&lt;p&gt;The same directory or file/stream can have multiple stream contexts.&lt;/p&gt;

&lt;p&gt;This is because the redirector cannot necessarily determine that the share is
the same (consider that ‘\machine\share\dir\dir2’ ‘z:\dir\dir2’ or
‘\192.1.108.3\share2\dir2’ can refer to the same directory). However, even
within one share there can be multiple contexts; the redirector does not know
that a file referenced via a short name is the same as one referenced via a
long name. It may not even be the file name that differs: ‘z:\programs
files\file’ will have a different stream context to ‘z:\progra~1\file’. Hint:
the win16 program ‘edit’ is a great way to force the use of short names.&lt;/p&gt;

&lt;p&gt;Beware of undocumented protocols between various components&lt;/p&gt;

&lt;p&gt;You will see this most often in Vista and/or when filtering MUP. These
protocols include (but are not limited to) magic values being passed down in
FsContext and FsContext2 during pre-created and out of band communication
which your filter may never see. Client Side Caching and DFS are two
components which have caused me problems, there are certainly others.&lt;/p&gt;

&lt;p&gt;Beware of the limitations of the media&lt;/p&gt;

&lt;p&gt;This is the most obvious issue. Redirectors work over unreliable media and so
failures from the FSD should be considered as usual and not exceptional. Run
your filter over RDR, pull out the Ethernet. What happens?&lt;/p&gt;

&lt;p&gt;Not all CIFS/SMB servers behave like Windows.&lt;/p&gt;

&lt;p&gt;… And even for Windows there have been multiple versions of these subsystems.&lt;/p&gt;

&lt;h2 id=&quot;hard-links&quot;&gt;5. Hard links&lt;/h2&gt;

&lt;p&gt;Hard links have been around since (at least) NT 3.54. Prior to Vista hard
links tended to be the preserve of the people writing to the native API or
using SFU.&lt;/p&gt;

&lt;p&gt;Hard links became much more main-stream in Vista where they acquired a Win32
API (CreateHardLink) and have become a favourite mechanism for the Windows
installer. Fortunately in Vista there are a few more tools to help the filter
driver.&lt;/p&gt;

&lt;p&gt;Considering hard links really boils down to two things:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Don’t assume that the name for a file is unique.&lt;/li&gt;
  &lt;li&gt;Remember that delete of a file is really an unlink operation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In addition, NTFS will give the same Stream Context for a file regardless of
the name used to open it but RDR won’t (as we saw above, a redirector cannot
be aware of all the paths to a file).&lt;/p&gt;

&lt;p&gt;In Vista a new QueryInformation (FileHardLinkInformation) call is declared by
ntifs (although no documentation exists). This enumerates all the names for a
file. In using it I have noted a couple of wrinkles you need to be aware of:&lt;/p&gt;

&lt;p&gt;Short names are listed as links. This is useful information, but bear in mind
that a short name is a “hybrid” – it is really a second name within a single
hard link. Inexplicably, the FileNameLength in the FILE_LINK_ENTRY_INFORMATION
structure is the number of Unicode character points, not the (more usual) size
in bytes.&lt;/p&gt;

&lt;h2 id=&quot;explicit-and-implicit-volume-locking&quot;&gt;6. Explicit and implicit volume locking&lt;/h2&gt;

&lt;p&gt;If your filter keeps handles open to the volume then you are probably already
aware of the need to respond to FSCTL_LOCK_VOLUME (explicit locking). You may
not be aware of the need to respond to an implicit lock – a volume open with
restricted sharing.&lt;/p&gt;

&lt;p&gt;The impact of this is best understood by inspecting the example code in the
metadatatool examples shipped with the WDK.&lt;/p&gt;

&lt;h2 id=&quot;case-sensitivity&quot;&gt;7. Case sensitivity&lt;/h2&gt;

&lt;p&gt;Since Windows 2000, case sensitivity in NTFS has been turned off in the
registry and it has become a easy to ignore this issue.&lt;/p&gt;

&lt;p&gt;However, SFU enables and enforces case sensitivity and it seems likely that
NFS (more widely available in Vista) will have similar behaviour. If your file
system or filter manipulates file names, then you should run some case
sensitivity tests. IFSTest has a few case sensitive tests and is a good place
to start.&lt;/p&gt;

&lt;p&gt;In general, case sensitivity devolves to propagating the logical not of
FO_OPENED_CASE_SENSITIVE into the RtlXXXUnicodeString functions.&lt;/p&gt;

&lt;h2 id=&quot;files-which-can-require-special-handling&quot;&gt;8. Files which can require special handling&lt;/h2&gt;

&lt;p&gt;Depending on their function, filter drivers may need to handle certain files
in particular ways. Often filters will decide that the best solution is to
ignore creates to these files entirely. You should think about special
handling for at least these files:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;NTFS reserved files. This includes the root directory and all files opened below the $Extend pseudo-directory.&lt;/li&gt;
  &lt;li&gt;Volume opens. These always require special processing. As noted above, implicit locking is a side effect of specific sorts of volume opens.&lt;/li&gt;
  &lt;li&gt;Sparse files. Backup filters in particular need to be aware of sparse files and to take the appropriate actions when dealing with them.&lt;/li&gt;
  &lt;li&gt;Encrypted files. Opening files which are encrypted by NTFS involves an undocumented protocol between a worker process and NTFS. Depending on precisely how active your filter is during create processing, you may need to become involved in this protocol if you have to handle encrypted files.&lt;/li&gt;
  &lt;li&gt;Compressed files. Whether a file is compressed is largely irrelevant to filters, but it is worth noting that all access to a compressed file is via the cache, even if the file has been opened FO_NO_INTERMEDIATE_BUFFERING.
Reparse points. Again, so long as you correctly handle STATUS_REPARSE, reparse points should be of no great concern to a filter driver. However, if you open files during processing you should be aware of whether or not you need to set the FILE_OPEN_REPARSE_POINT bit.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;interoperability-testing-with-other-filters&quot;&gt;9. Interoperability testing with other filters&lt;/h2&gt;

&lt;p&gt;Interoperability testing can be open ended. This does not mean that you should
not start it. I would recommend anyone to go to the regular IFS Plugfest
events, which offer an unparalleled opportunity to test with a huge cross
section of other filters. You may find that your first visit flushes several
issues, but you will usually thereafter find that there are a few anti-
patterns you should be avoiding. Of course, attendance at Plugfest is self
selecting and so it is less likely that badly behaved filters (one which hook
for instance) will be present.&lt;/p&gt;

&lt;p&gt;And finally…&lt;/p&gt;

&lt;p&gt;Don’t forget to run both prefast and pclint over your code, and make sure that
understand what it is saying to you.&lt;/p&gt;

&lt;p&gt;If you have any comments on this article, please feel free to send me mail.&lt;/p&gt;

&lt;p&gt;Equally, if you need help with planning the test of your driver, or with any
other Windows file system project please feel free to contact Steading System
Software.&lt;/p&gt;
</description>
        <pubDate>2014-08-01 13:12:12 +0100</pubDate>
        <link>http://www.steadingsoftware.com/2014/08/01/testing-at-the-edge/</link>
        <guid isPermaLink="true">http://www.steadingsoftware.com/2014/08/01/testing-at-the-edge/</guid>
        
        
      </item>
    
  </channel>
</rss>
