aboutsummaryrefslogtreecommitdiffstats
path: root/epan
diff options
context:
space:
mode:
authorStephen Fisher <steve@stephen-fisher.com>2010-08-26 18:06:56 +0000
committerStephen Fisher <steve@stephen-fisher.com>2010-08-26 18:06:56 +0000
commit36c2954387a76f75d68b72a00b9d31123266cd91 (patch)
treeb9834b425d1ac2a79b2d6f5287f1911b2731c272 /epan
parent88a0298183a5ed4d631eb00a9ee7b597841041ff (diff)
Show a text string of the Windows version (if Windows 2000 or higher.)
svn path=/trunk/; revision=33936
Diffstat (limited to 'epan')
-rw-r--r--epan/dissectors/packet-smb-browse.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/epan/dissectors/packet-smb-browse.c b/epan/dissectors/packet-smb-browse.c
index d893c0cdda..de85aeb92f 100644
--- a/epan/dissectors/packet-smb-browse.c
+++ b/epan/dissectors/packet-smb-browse.c
@@ -164,6 +164,25 @@ static const value_string server_types[] = {
{0, NULL}
};
+#define SET_WINDOWS_VERSION_STRING(os_major_ver, os_minor_ver, windows_version) \
+ if(os_major_ver == 6 && os_minor_ver == 1) \
+ windows_version = "Windows 7 or Windows Server 2008 R2"; \
+ \
+ else if(os_major_ver == 6 && os_minor_ver == 0) \
+ windows_version = "Windows Vista or Windows Server 2008"; \
+ \
+ else if(os_major_ver == 5 && os_minor_ver == 2) \
+ windows_version = "Windows Server 2003 R2 or Windows Server 2003"; \
+ \
+ else if(os_major_ver == 5 && os_minor_ver == 1) \
+ windows_version = "Windows XP"; \
+ \
+ else if(os_major_ver == 5 && os_minor_ver == 0) \
+ windows_version = "Windows 2000"; \
+ \
+ else \
+ windows_version = NULL;
+
static const value_string resetbrowserstate_command_names[] = {
{ 0x01, "Stop being a master browser and become a backup browser"},
{ 0x02, "Discard browse lists, stop being a master browser, and try again"},
@@ -565,6 +584,8 @@ dissect_mailslot_browse(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tr
guint8 host_name[17];
gint namelen;
guint8 server_count, reset_cmd;
+ guint8 os_major_ver, os_minor_ver;
+ gchar *windows_version = NULL;
int i;
guint32 uptime;
@@ -619,6 +640,15 @@ dissect_mailslot_browse(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tr
host_name);
offset += 16;
+ /* Windows version (See "OSVERSIONINFO Structure" on MSDN) */
+ os_major_ver = tvb_get_guint8(tvb, offset);
+ os_minor_ver = tvb_get_guint8(tvb, offset+1);
+
+ SET_WINDOWS_VERSION_STRING(os_major_ver, os_minor_ver, windows_version);
+
+ if(windows_version)
+ proto_tree_add_text(tree, tvb, offset, 2, "Windows version: %s", windows_version);
+
/* OS major version */
proto_tree_add_item(tree, hf_os_major, tvb, offset, 1, TRUE);
offset += 1;
@@ -807,6 +837,8 @@ dissect_mailslot_lanman(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tr
proto_item *item = NULL;
guint32 periodicity;
const guint8 *host_name;
+ guint8 os_major_ver, os_minor_ver;
+ gchar *windows_version = NULL;
guint namelen;
col_set_str(pinfo->cinfo, COL_PROTOCOL, "BROWSER");
@@ -843,6 +875,15 @@ dissect_mailslot_lanman(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tr
offset = dissect_smb_server_type_flags(
tvb, offset, pinfo, tree, NULL, TRUE);
+ /* OS version string (See "OSVERSIONINFO Structure" on MSDN) */
+ os_major_ver = tvb_get_guint8(tvb, offset);
+ os_minor_ver = tvb_get_guint8(tvb, offset+1);
+
+ SET_WINDOWS_VERSION_STRING(os_major_ver, os_minor_ver, windows_version);
+
+ if(windows_version)
+ proto_tree_add_text(tree, tvb, offset, 2, "Windows version: %s", windows_version);
+
/* OS major version */
proto_tree_add_item(tree, hf_os_major, tvb, offset, 1, TRUE);
offset += 1;